Stub은 값을 고정하고 Mock은 호출까지 검증한다

UsersService를 테스트할 때 DatabaseService를 실제로 실행하지 않습니다. 대신 반환값과 호출 기록을 통제하는 가짜 객체를 주입합니다.

Stub

결과를 미리 정한다

조회 메서드가 DB 대신 예측 가능한 사용자 데이터를 돌려줍니다.

findOneUser: jest.fn(() => user)
Mock

호출 방식을 확인한다

생성 메서드가 몇 번, 어떤 인자로 호출됐는지 단언합니다.

toHaveBeenCalledWith({ name, email })
역할테스트에서 하는 일Jest 단서
대상UsersService의 분기와 반환값만 검증module.get(UsersService)
가짜 의존성DatabaseService 토큰을 mock 객체로 교체provide + useValue
초기화테스트 사이 호출 기록을 비움jest.clearAllMocks()

핵심: Stub은 “무엇을 돌려줄지”, Mock은 “어떻게 불렸는지”를 테스트 안에서 통제하게 해줍니다.