상세 컨텐츠

본문 제목

Test Double (테스트 더블) 용어 정리

Programming language/Kotlin

by choiDev 2025. 4. 16. 15:52

본문


TestDouble (테스트 더블)

테스트 환경에서 실제 객체를 대체하기 위해 사용하는 객체를 통칭하는 말이에요. 마치 영화에서 실제 배우 대신 사용하는 스턴트 더블 같은 개념이라고 보면 돼요.



Dummy

- 정의 : 아무동작도 하지 않는 객체를 의미합니다.

- 용도 : 필요하지만 사용되지 않는 객체를 대신 채울때, null 대신 넣을 호출되지 않는 인자

예시 

val dummyLogger = DummyLogger()
val userService = UserService(dummyLogger) // logger는 주입은 해줘야하지만 테스트 하고픈 로직에서는 사용 안됨

 


Fake 

- 정의 : 실제 동작을 흉내낸 간단한 가짜 구현체.

- 용도 : 실제 DB나 API 대신 사용할 수 있는 간단한 대체 구현, 인메모리 DB, 가짜 알고리즘 등

예시

class FakeUserRepository : UserRepository {
    private val users = mutableListOf<User>()
    override fun save(user: User) = users.add(user)
    override fun findByEmail(email: String) = users.find { it.email == email }
}

 

 



Stub

- 정의 : 호출 시, 미리 정해진 값을 반환하는 객체.

- 용도 : 테스트 대상이 의존하는 객체가 항상 일정한 응답을 하도록 고정할 때., 항상 true를 반환하는 인증 Stub

class StubEmailValidator : EmailValidator {
    override fun isValid(email: String) = true // 항상 true 반환
}

Spy

- 정의 : 실제 객체처럼 동작하면서 호출 횟수나 파라미터를 기록함

- 용도 : 검증용으로 얼마나 불렸는지, 어떤값으로 불렸는지 확인 함, 메서드 호출 여부/ 횟수 추적 가능

val emailService = spy(RealEmailService())
userService.registerUser("a@a.com")
verify(emailService, times(1)).sendWelcomeEmail("a@a.com")

Mock

- 정의 : 행동 정의 + 검증 기능을 함께 가진 객체 (주로 Mockito 등 프레임워크 사용)

- 용도 : 가짜 객체 생성 + 동작 설정 + 호출 검증까지 다 할 때.

 

val mockRepo = mock(UserRepository::class.java)
whenever(mockRepo.findByEmail("a@a.com")).thenReturn(User("a@a.com"))

요약 비교표

 

구분 실제동작 고정응답 호출기록 목적
Dummy 채우기 용도
Fake 간단한 가짜 구현
Stub 고정 응답 반환
Spy 호출 감시
Mock 테스트 전용 설정 + 검증

'Programming language > Kotlin' 카테고리의 다른 글

[Kotlin] Object & Companion Object  (0) 2021.09.21
[Kotlin] Data Class (데이터 클래스)  (0) 2021.09.21
[Kotlin] 표준함수  (0) 2020.12.06
[Kotlin] 문자열  (0) 2020.12.05
[Kotlin] 익명 함수와 함수 타입  (1) 2020.12.05

관련글 더보기