Test Double
테스트에서 실제 객체를 대체하는 모든 종류의 객체를 의미하는 포괄적인 개념
Test Double의 종류
Dummy - 아무것도 하지 않는 깡통 객체 (예: null 리턴, 빈 객체)
Fake - 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체
(ex, FakeRepository)
Stub - 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체
그 외에는 응답하지 않는다.
Spy
- Stub이면서호출된 내용을 기록하여 보여줄 수 있는 객체
일부는 실제 객체처럼 동작시키고 일부만 stubbing 할 수 있다.
-간단한 로직을 포함하여 동작하는 객체
Mock - 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체
Stub 과 Mock 은 다르다.
구분 | Stub | Mock |
목적 | 특정 입력에 대해 미리 정의된 값을 반환 | 호출 여부 및 인자 검증 (행동 기반 테스트) |
검증 방식 | 반환값이 올바른지 검증 (상태 기반 테스트) | 특정 메서드가 예상대로 호출되었는지 검증 (행동 기반 테스트) |
예제 | API 응답을 미리 정의 | 특정 메서드가 몇 번 호출되었는지 확인 |
라이브러리 | Mockito.when(...).thenReturn(...) | Mockito.verify(...) |
Stub 상태 검증 - 메일이 보내고 return 값 검증
Mock 행위검증 - mock이 그 행위를 했는지 검증
보통 Mockito를 통해서 Mock을 사용
class UserServiceTest {
@Test
fun `유저를 저장하면 이메일을 전송해야 한다`() {
val emailService = mock(EmailService::class.java) // Mock 객체 생성
val userService = UserService(emailService)
val user = User("test@example.com")
userService.registerUser(user)
// 이메일 전송이 한 번 호출되었는지 검증
verify(emailService, times(1)).sendEmail(user.email)
}
}
mock(): EmailService의 Mock 객체 생성
verify(): sendEmail 메서드가 정확히 1번 호출되었는지 검증
'이것저것' 카테고리의 다른 글
Mock 관련 Annotations (0) | 2025.03.03 |
---|---|
Web Cache (0) | 2024.06.28 |
HTTPS, SSL (0) | 2024.06.27 |