[kotlin] 코틀린 Mockito를 활용하여 특정 객체 상태에 따른 동작(mocking) 테스트

Mockito는 테스트 더블(Test Double)의 한 종류로써, 행위 기반 테스트 방법을 지원하는 자바용 mocking 프레임워크입니다. 이것은 객체 지향 프로그래밍에서 객체 간 협력을 테스트하는 방법을 제시합니다. 코틀린에서 Mockito를 활용하여 특정 객체의 상태를 가정하고 그 상태에 따른 동작을 테스트하는 방법에 대해 알아봅시다.

Mockito 라이브러리 추가

먼저, 프로젝트의 Gradle 또는 Maven 파일에 Mockito 라이브러리를 추가해야 합니다. Gradle을 사용하는 경우 아래와 같이 의존성을 추가할 수 있습니다.

testImplementation 'org.mockito:mockito-kotlin:3.2.0'

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

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-kotlin</artifactId>
    <version>3.2.0</version>
    <scope>test</scope>
</dependency>

특정 객체 상태에 따른 동작 테스트

다음은 특정 객체의 상태에 따른 동작을 테스트하는 예제 코드입니다. 이 예제에서는 OrderService 클래스의 processOrder 메서드가 특정 주문 상태에 따라 다른 동작을 수행하는지 테스트하는 방법을 살펴봅니다.

먼저, Mockito의 mock 함수를 사용하여 OrderService의 mock 객체를 생성합니다. 그리고 givenwillReturn 함수를 사용하여 processOrder 메서드가 특정 상태에 따라 다른 값을 반환하도록 설정합니다. 마지막으로, verify 함수를 사용하여 특정 조건에 해당하는지를 확인하는 테스트를 수행합니다.

import org.junit.jupiter.api.Test
import org.mockito.kotlin.*

class OrderServiceTest {

    @Test
    fun `test processOrder`() {
        // Given
        val orderService = mock<OrderService>()
        
        given(orderService.processOrder(any())).willReturn("Order processed successfully")

        // When
        val result = orderService.processOrder(Order("pending"))

        // Then
        verify(orderService).processOrder(any())
        assertEquals("Order processed successfully", result)
    }
}

위 코드에서 given(orderService.processOrder(any())).willReturn("Order processed successfully") 부분은 processOrder 메서드가 어떤 주문 상태에 대해 결과를 반환할지를 설정합니다. 그리고 verify(orderService).processOrder(any()) 부분은 processOrder 메서드가 특정 조건에 맞게 호출되었는지를 검증합니다.

이와 같이 Mockito를 활용하여 특정 객체의 상태에 따른 동작을 테스트할 수 있습니다. 이를 통해 테스트 코드를 작성하면서 특정 객체의 동작에 대한 사전 가정을 설정하고, 이에 따라 테스트 케이스를 작성할 수 있습니다.

마치며

오늘은 코틀린에서 Mockito를 활용하여 특정 객체의 상태에 따른 동작을 테스트하는 방법에 대해 알아보았습니다. Mockito를 사용하면 객체 간 상호작용을 테스트하는 과정을 보다 쉽게 수행할 수 있으며, 테스트 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 이를 통해 안정적이고 견고한 애플리케이션을 만들기 위한 기반을 마련할 수 있습니다.

참고문헌: