[kotlin] 코틀린 Mockito를 활용하여 특정 조건에 따른 테스트 작성하기

Mockito는 테스트 더블(Test Double)을 생성하고 관리할 수 있는 Java 라이브러리입니다. 코틀린에서 Mockito를 활용하여 특정 조건에 따른 테스트를 작성하는 방법을 살펴보겠습니다.

Mockito 의존성 추가

우선, Mockito를 프로젝트에 추가해야 합니다. Gradle을 사용하는 경우 다음과 같이 의존성을 추가합니다.

testImplementation 'org.mockito:mockito-core:3.10.0'

Maven을 사용하는 경우 다음과 같이 의존성을 추가합니다.

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.10.0</version>
    <scope>test</scope>
</dependency>

의존성을 추가한 후에는 프로젝트를 새로고침하여 변경 사항을 적용합니다.

특정 조건에 따른 Mock 객체 반환

코틀린 Mockito를 사용하여 특정 조건에 따라 Mock 객체가 특정 값을 반환하도록 설정할 수 있습니다. 예를 들어, 사용자의 나이에 따라 다른 할인율을 계산하는 메서드를 가진 서비스를 가정해보겠습니다.

interface DiscountService {
    fun calculateDiscount(userAge: Int): Double
}

해당 서비스를 테스트하기 위해 Mockito를 사용하여 조건에 따라 다른 값을 반환하는 Mock 객체를 생성할 수 있습니다.

class DiscountServiceTest {
    @Test
    fun `test calculate discount based on user age`() {
        val mockDiscountService = mock<DiscountService> {
            on { calculateDiscount(any()) } doAnswer {
                val userAge = it.getArgument<Int>(0)
                if (userAge < 18) {
                    0.2 // 20% 할인율
                } else {
                    0.1 // 10% 할인율
                }
            }
        }

        // 테스트 코드 작성
    }
}

위의 예제에서 on { calculateDiscount(any()) } doAnswer { ... } 부분은 calculateDiscount 메서드가 호출될 때 20% 또는 10%의 값을 반환하도록 지정한 것입니다.

이제 해당 Mock 객체를 사용하여 특정 조건에 따라 할인율을 올바르게 계산하는지 테스트할 수 있습니다.

결론

코틀린 Mockito를 활용하여 특정 조건에 따라 Mock 객체가 특정 값을 반환하도록 설정하는 방법을 살펴보았습니다. 이를 통해 테스트를 보다 유연하게 작성하고 특정 조건에 따른 동작을 검증할 수 있습니다. Mockito 사용법에 대한 더 자세한 내용은 Mockito 공식 문서를 참고하시기 바랍니다.