[kotlin] JUnit과 모킹 프레임워크 (Mockito, MockK) 함께 사용하기

테스트 주도 개발(Test-Driven Development, TDD)이나 단위 테스트를 작성할 때, MockitoMockK와 같은 모킹 프레임워크를 사용하여 외부 의존성을 가짜(mock) 객체로 대체할 수 있습니다.

이 포스트에서는 Kotlin에서 JUnit 5와 함께 MockitoMockK를 사용하는 방법에 대해 알아보겠습니다.

목차

  1. Mockito 소개
  2. MockK 소개
  3. JUnit 5와 함께 Mockito 사용하기
  4. JUnit 5와 함께 MockK 사용하기
  5. 결론

1. Mockito 소개

Mockito는 Java 기반의 모킹 프레임워크로, 행위 기반(Mocking) 모킹을 지원합니다. 특정 메서드가 호출될 때 결과를 설정하거나 해당 메서드가 특정 파라미터로 호출되었는지 검증하는 기능을 제공합니다.

예시 코드:

// 객체 생성
List<String> mockedList = mock(List.class);

// 특정 메서드 호출 결과 설정
when(mockedList.get(0)).thenReturn("first");

// 특정 파라미터로 메서드 호출여부 확인
verify(mockedList).get(0);

2. MockK 소개

MockK는 Kotlin을 위한 모킹 프레임워크로, Mockito와 유사한 기능을 제공합니다. 코틀린의 확장 함수와 인라인 함수를 활용하여 DSL(Domain Specific Language) 형식으로 모킹 및 검증을 진행할 수 있습니다.

예시 코드:

// 객체 생성
val mockedList = mockk<List<String>>()

// 특정 메서드 호출 결과 설정
every { mockedList.get(0) } returns "first"

// 특정 파라미터로 메서드 호출여부 확인
verify { mockedList.get(0) }

3. JUnit 5와 함께 Mockito 사용하기

JUnit 5와 함께 Mockito를 사용하려면, 해당 의존성을 빌드 도구(예: Maven, Gradle)에 추가하고, @ExtendWith(MockitoExtension::class) 어노테이션을 사용하여 MockitoExtension을 활성화해야 합니다.

Gradle에서 Mockito 의존성 추가:

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

JUnit 5에서 MockitoExtension 사용:

@ExtendWith(MockitoExtension::class)
class MyTestClass {
    // 테스트 코드 작성
}

4. JUnit 5와 함께 MockK 사용하기

JUnit 5와 함께 MockK를 사용하기 위해서는 MockK 관련 의존성을 추가하고, MockKExtension을 JUnit 5 테스트 클래스에 적용해야 합니다.

Gradle에서 MockK 의존성 추가:

testImplementation 'io.mockk:mockk:1.12.0'

JUnit 5에서 MockKExtension 사용:

@ExtendWith(MockKExtension::class)
class MyTestClass {
    // 테스트 코드 작성
}

5. 결론

이제 JUnit 5와 함께 Mockito 또는 MockK를 사용하여 Kotlin 기반의 테스트 코드를 작성하는 방법을 알게 되었습니다. 이러한 모킹 프레임워크를 적절히 활용하여 외부 의존성을 가진 코드를 테스트하는 데 도움이 될 것입니다.

이상적인 테스트 코드 작성을 통해 안정적이고 견고한 애플리케이션을 만드는데 도움이 되길 바랍니다.

참조: