[kotlin] Mockito와 함께하는 코틀린에서의 서비스 호출 모의(mocking) 테스트 방법

소프트웨어를 개발하다 보면 외부 서비스나 의존성을 가진 모듈을 테스트할 때, 모의(mocking) 객체를 사용하여 해당 서비스 호출을 시뮬레이션하는 것이 중요합니다. 이번 글에서는 Mockito 라이브러리를 사용하여 코틀린에서 서비스 호출을 모의하는 방법에 대해 알아보겠습니다.

Mockito란?

Mockito는 자바 프레임워크에서 가장 인기 있는 mocking 라이브러리 중 하나로, 외부 의존성을 가진 모듈을 테스트할 때 사용됩니다. Mockito를 이용하면 테스트를 위해 외부 서비스를 호출하지 않고도 테스트 코드를 작성할 수 있습니다.

Mockito를 이용한 모의 테스트 예제

예를 들어, UserService 라는 서비스가 있고 이를 사용하는 UserControllermocking 테스트하려고 합니다. 아래는 UserService의 간단한 예제 코드입니다.

interface UserService {
    fun getUser(id: String): User
}

그리고 이 UserService를 사용하는 UserController의 간단한 코드가 다음과 같이 주어졌다고 가정해 봅시다.

class UserController(private val userService: UserService) {
    fun getUser(id: String): User {
        return userService.getUser(id)
    }
}

이제 UserController를 테스트하는 동안 외부 서비스 호출을 모의로 대체할 수 있습니다. 아래의 예제는 Mockito를 사용하여 UserService의 호출을 모의하는 방법을 보여줍니다.

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock

class UserControllerTest {

    @Test
    fun testGetUser() {
        val mockUserService = mock(UserService::class.java)
        
        val testUser = User("testUserId", "Test User")
        `when`(mockUserService.getUser("testUserId")).thenReturn(testUser)
        
        val userController = UserController(mockUserService)
        val result = userController.getUser("testUserId")
        
        assertEquals(testUser, result)
    }
}

위의 코드에서는 Mockito를 사용하여 UserServicegetUser 메서드 호출을 모의하고, 예상 결과를 설정한 후 UserController를 호출하여 결과를 확인하고 있습니다.

결론

Mockito를 사용하면 코틀린에서도 외부 의존성을 가진 모듈을 쉽게 모의(mocking)하여 테스트할 수 있습니다. 모의(mocking)를 통해 외부 서비스 호출을 회피하고, 테스트의 불안정성을 줄이고, 테스트 속도를 향상시킬 수 있습니다.

Mockito의 자세한 사용법은 공식 홈페이지 및 문서에서 확인할 수 있습니다.

참고 자료

Happy Coding!