[kotlin] Mockito와 함께하는 코틀린에서의 다양한 인터페이스 모의(mocking) 테스트 방법

코틀린에서 Mockito를 사용하면 테스트 중에 인터페이스를 모의(mock)할 수 있어서 유용합니다. 다양한 상황에서 인터페이스 모의 테스트를 어떻게 할 수 있는지 알아보겠습니다.

1. Mockito란 무엇인가?

Mockito는 자바에서 테스트하기 쉬운 코드를 작성하도록 도와주는 오픈 소스 자바 mocking 프레임워크입니다. Mockito를 사용하면 인터페이스를 모의(mock)하거나 스텁(stub)을 만들어 테스트할 수 있습니다.

2. 코틀린에서 Mockito 사용하기

코틀린에서 Mockito를 사용하려면 먼저 아래와 같이 의존성을 추가해야 합니다.

testImplementation("org.mockito:mockito-core:3.12.4")

의존성을 추가한 후에는 Mockito를 사용하여 테스트할 클래스에 대한 인터페이스를 모의(mock)하거나 스텁(stub)을 만들 수 있습니다.

예를 들어, UserService 인터페이스를 모의(mock)하고 getUser 메서드를 스텁(stub)하는 방법은 다음과 같습니다.

val userService = mock(UserService::class.java)
`when`(userService.getUser(1)).thenReturn(User(1, "John Doe"))

3. 코틀린에서 다양한 인터페이스 모의 테스트하기

3.1. 단일 메서드를 갖는 인터페이스 모의(mock)하기

interface Calculator {
    fun add(a: Int, b: Int): Int
}

val calculator = mock(Calculator::class.java)
`when`(calculator.add(2, 3)).thenReturn(5)

3.2. 다수의 메서드를 갖는 인터페이스 모의(mock)하기

interface DocumentService {
    fun createDocument(title: String, content: String): Boolean
    fun deleteDocument(id: String): Boolean
}

val documentService = mock(DocumentService::class.java)
`when`(documentService.createDocument("Mockito", "Testing")).thenReturn(true)
`when`(documentService.deleteDocument("12345")).thenReturn(true)

3.3. 예외를 발생시키는 메서드를 갖는 인터페이스 모의(mock)하기

interface FileService {
    @Throws(IOException::class)
    fun readFile(fileName: String): String
}

val fileService = mock(FileService::class.java)
`when`(fileService.readFile("test.txt")).thenThrow(IOException("File not found"))

4. 마치며

코틀린에서 Mockito를 사용하여 다양한 상황에서 인터페이스를 모의(mock)하는 방법에 대해 알아보았습니다. Mockito를 이용하면 테스트 코드 작성이 훨씬 수월해지며, 다양한 테스트 케이스에 대해 안정적이고 신속하게 테스트할 수 있습니다.

참고 자료: Mockito 공식 홈페이지