Test Code Why? What? How?
두줄요약
회귀 오류를 줄이기 위한 테스트 피라미드와 단위 테스트의 역할을 설명했습니다. SUT 명세 기반 검증과 결정적 코드 분리로 테스트 용이성을 높이는 방법을 제시합니다.
문제 상황
- 소프트웨어 변경에 따른 부수효과와 회귀 오류 발생 가능성
- 검증 없는 호출, 단순 NotNull·존재 여부 확인 등 의도가 불명확한 테스트 코드
- 테스트 부재로 인한 수동 검증 반복과 리팩터링 위험 증가
구조와 흐름
- Unit·Service(Integration)·UI 테스트의 속도와 복잡도 차이를 다루는 테스트 피라미드
- 테스트 코드를 SUT의 상세 구현이 아닌 외부에 제공하는 디자인·명세의 경우의 수로 정의
- 상태 검증 중심의 단위 테스트와 필요한 경우에 한정한 Mock 기반 행위 검증
해결 방법
- 입력값, 정상 결과, 예외 조건 등 SUT 명세 기반 테스트 케이스 구성
- 동일 입력에 동일 결과를 내는 결정적 코드와 부수효과 없는 코드 지향
- Repository 조회·저장 같은 비결정적 요소를 분리하고 바깥 경계에서 조합하는 Humble Object Pattern
주의할 점
- 테스트명·검증 목적의 명확화, 단일 목적·독립성 유지, 테스트 코드의 지속적 리팩터링
- private 메서드 직접 테스트나 테스트 실행을 위한 접근 제어자 변경 지양
- TDD와 테스트 코드 구현의 구분, 커버리지 수치 자체를 목표로 삼는 방식 경계






