Unit test target

서비스와 컨트롤러는 다른 것을 단언한다

같은 Jest 도구를 쓰더라도 테스트 대상이 바뀌면 mock 범위와 단언 기준이 달라진다. 먼저 책임을 고르고, 그 책임 바깥을 대역으로 둔다.

테스트 대상을 고르는 기준

service vs controller
Service test 비즈니스 규칙

실제 대상

UsersService, OrdersService 같은 provider 메서드

가짜로 둘 것

repository, 외부 client, mailer, clock

주요 단언

반환값, 예외, 저장 payload, 협력 객체 호출

Controller test 요청 위임

실제 대상

AppController 같은 라우트 핸들러 메서드

가짜로 둘 것

service provider와 비즈니스 처리 결과

주요 단언

메서드 반환, DTO 전달, 서비스 호출 여부

질문
서비스
컨트롤러
A급 기준
무엇을 믿나
대상 provider 구현
대상 controller 구현
믿는 범위가 한 줄로 설명됨
무엇을 바꾸나
DB, API, repository
service provider
외부 I/O가 테스트를 흔들지 않음
무엇을 피하나
내부 private 구현 단언
HTTP 전체 경로 단언
실패 원인이 테스트 대상에 남음