테스트 코드 작성의 지루함을 해결하기 위해 스냅샷 테스트(Snapshot Testing) 기법을 소개함
CLI, 컴파일러, 웹 애니메이션 등 다양한 분야에 적용 가능한 스냅샷 테스트의 활용성을 강조함
테스트 설정의 복잡성과 스냅샷 테스트의 무분별한 사용에 대한 비판적 시각도 존재함
테스트 주도 개발(TDD)과 테스트 후 개발(Test-After) 방식에 대한 개발자 간의 의견 차이가 나타남
스냅샷 테스트는 테스트 대상의 출력을 미리 정의된 스냅샷과 비교하여 변경 사항을 감지하는 방식이다. Birdie 라이브러리를 예시로, `birdie.snap()` 함수를 사용하여 출력을 스냅샷으로 저장하고, 테스트 실행 시 변경 여부를 확인한다. 이는 VCS(Version Control System)와 유사한 방식으로, 변경 사항을 쉽게 확인하고 관리할 수 있도록 돕는다. 특히, 도움말 텍스트(Help Text)와 같이 문자열 기반의 출력에 효과적이다.
스냅샷 테스트는 테스트 코드의 가독성을 높이고, 유지보수를 용이하게 한다. 변경 사항 발생 시 diff 뷰(Diff View)를 제공하여, 변경된 부분을 직관적으로 파악할 수 있다. 또한, 의 번거로움을 줄여, 개발자가 테스트 자체에 집중할 수 있도록 돕는다. 하지만, 은 오히려 테스트의 가치를 떨어뜨릴 수 있다는 비판도 존재한다.
복잡한 데이터 구조를 테스트하는 경우, 스냅샷의 가독성이 떨어질 수 있다. 예를 들어, 컴파일러 툴팁(Compiler Tooltip)의 경우, 기본 `to_string` 함수를 사용하면 스냅샷이 불필요하게 길어지고, 변경 사항을 파악하기 어려워진다. 따라서, 스냅샷의 내용 구성(Snapshot Content)에 주의를 기울여야 하며, 의미 있는 정보(Meaningful Information)만 담도록 설계해야 한다.
테스트 작성 시점에 대한 다양한 의견이 존재한다. 테스트 주도 개발(TDD) 지지자들은 테스트를 먼저 작성함으로써 코드 설계를 개선하고, 버그를 예방할 수 있다고 주장한다. 반면, 테스트 후 개발(Test-After) 방식을 선호하는 개발자들은, 통합 작업(Integration Work)의 경우 테스트를 먼저 작성하는 것이 비효율적일 수 있다고 말한다. 테스트의 목적과 코드의 특성에 따라 적절한 방식을 선택하는 것이 중요하다.