Pink Spider/Mock, Stub 의 차이

Created Thu, 03 Apr 2025 15:57:29 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
505 Words 2 min

Mock, Stub 의 차이

mockstub은 테스트에서 외부 의존성을 대체하기 위해 쓰이는 객체인데, 둘은 목적과 기능 면에서 조금 달라요.


📌 요약 비교

항목 Stub Mock
목적 고정된 값 반환 (단순 대체) 동작 검증 + 유연한 설정
기능 미리 정의된 응답 제공 호출 여부, 호출 횟수, 파라미터 검증 등 가능
테스트 타입 주로 상태 기반 테스트 (State-based) 주로 행위 기반 테스트 (Behavior-based)
예시 “이 메서드가 호출되면 무조건 이 값을 리턴” “이 메서드가 정확히 한 번 호출됐는지 확인하자”

🔹 Stub: 단순하게 리턴값만 정해놓은 가짜

  • 실제 메서드 로직은 필요 없고, “이 값을 주면 이 값을 돌려줘!” 같은 간단한 대체품.
  • 주로 “기존 시스템에서 이거만 제대로 동작하면 돼"라는 테스트에 사용.
when(userRepository.findById(1L)).thenReturn(Optional.of(user));

🔸 Mock: 행위(호출 여부 등)까지 확인하는 가짜

  • 리턴값도 정의할 수 있지만, “정말로 이 메서드가 호출됐는가?” 같은 검증도 가능.
  • verify() 같은 메서드를 통해 테스트의 정확성을 높임.
verify(userRepository, times(1)).findById(1L);

✅ 실제 테스트 예시

@Mock
UserRepository userRepository;

@InjectMocks
UserService userService;

@Test
void testUserFetch() {
    // Stub: 리턴값 지정
    when(userRepository.findById(1L)).thenReturn(Optional.of(new User("Alice")));

    // 메서드 실행
    User user = userService.getUser(1L);

    // Mock: 호출 여부 검증
    verify(userRepository, times(1)).findById(1L);
}

📎 간단 비유

  • Stub: “누가 와도 무조건 이 대사만 말해!”
  • Mock: “누가 오면 이 대사를 하고, 제대로 말했는지 검사도 합니다.!”