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

소프트웨어를 개발하다 보면 여러 환경에서 동작해야 하는 요건이 있을 수 있습니다. 이러한 경우에는 다양한 시나리오에 대해 테스트를 작성해야 합니다. 이번에는 코틀린과 Mockito를 사용하여 특정 환경 요건에 따른 테스트 케이스를 작성하는 방법에 대해 알아보겠습니다.

1. Mockito 소개

Mockito는 자바 프로그램에서 모의 객체(Mock Object) 를 생성하고 제어하는 데 사용되는 인기 있는 테스트 프레임워크입니다. 이를 통해 의존성이 있는 객체를 테스트할 때 실제 구현 대신에 가짜 객체를 사용하여 모의 상황을 만들 수 있습니다.

2. 환경 요건에 따른 테스트 작성 예제

가정해 보겠습니다. 특정 환경에서는 사용자 정보를 다르게 설정해야 한다고 합시다. 이를 위해 사용자 정보를 제공하는 서비스를 만들고, 이 서비스에 의존성이 있는 클래스를 테스트하려고 합니다.

interface UserService {
    fun getUserInfo(): UserInfo
}

data class UserInfo(val id: String, val name: String)

class UserProcessor(private val userService: UserService) {
    fun processUser(): String {
        val userInfo = userService.getUserInfo()
        return "Processing user: ${userInfo.id} - ${userInfo.name}"
    }
}

위 코드에서 UserProcessor 클래스는 UserService 인터페이스에 의존합니다. 이제 해당 클래스를 Mockito를 사용하여 특정 사용자 정보에 따른 테스트를 작성해보겠습니다.

import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension
import org.mockito.kotlin.whenever

@ExtendWith(MockitoExtension::class)
class UserProcessorTest {

    @Mock
    private lateinit var userService: UserService

    private lateinit var userProcessor: UserProcessor

    @Test
    fun testUserProcessing() {
        // Mock 사용자 정보
        val mockUserInfo = UserInfo("123", "MockUser")

        // 사용자 정보 서비스가 호출될 때 모의 객체를 반환하도록 설정
        whenever(userService.getUserInfo()).thenReturn(mockUserInfo)

        // 특정 사용자 정보에 따른 처리 테스트
        userProcessor = UserProcessor(userService)
        val result = userProcessor.processUser()

        // 결과 검증
        assert(result == "Processing user: 123 - MockUser")
    }
}

위의 예제에서는 Mockito를 사용하여 UserService 인터페이스의 getUserInfo 메서드를 모의(mock) 객체로 설정하고, UserProcessor 클래스의 processUser 메서드를 특정 사용자 정보에 따라 테스트했습니다.

결론

코틀린과 Mockito를 사용하여 특정 환경 요건에 따른 테스트를 작성하는 방법에 대해 알아보았습니다. Mockito를 활용하면 실제 환경을 신경 쓸 필요 없이 다양한 시나리오에 대한 테스트를 쉽게 작성할 수 있습니다.

참고 문헌: