이번 포스팅에서 kotlin 프로젝트에서 테스트 작성할 때 mock 생성을 도와주는 라이브러리인 MockK 사용법을 알아보자.
mock에 대해서 옛날에 작성해놓은 포스팅이 있으니 mock이 뭔지 모른다면 보고오자.
MockK란?
MockK는 kotlin 테스트 MockK를 만들어 주는 라이브러리다.
이름을 잘 보면 알 수 있다. Mock + K(otlin)
java로 개발하다가 kotlin으로 넘어오고 처음엔 mockito를 썼었는데 mockito는 java 테스트 mock을 만들어 주는 라이브러리라 kotlin에 적합하지 않았다.
그래서 찾다보니 MockK라는 걸 많이 쓰고 있어서 최근에도 계속 사용하고있다.
JUnit, Kotest 등 다양한 테스트 라이브러리랑 같이 사용할 수 있다.
MockK 특징
1. Kotlin과의 호환성
MockK는 Kotlin과 완벽하게 호환되어 Kotlin 특징을 완전히 활용할 수 있습니다. 예를 들어, Null-Safety, Extension Function, Coroutine, Data class 등 Kotlin에서 사용되는 다양한 기능을 지원합니다.
2. 간결성
MockK는 다양한 기능을 제공하면서도 코드를 간결하게 작성할 수 있도록 도와줍니다. 예를 들어, Stubbing 및 Verification을 한 줄로 작성할 수 있으며, DSL (Domain Specific Language)을 제공하여 가독성을 높여줍니다.
3. 직관성
MockK는 명확하고 직관적인 API를 제공하여 테스트 코드를 작성하는 데 도움을 줍니다. Mockito와 같은 다른 모킹 라이브러리보다 더욱 직관적이며, MockK를 처음 사용하는 개발자들도 쉽게 접근할 수 있습니다.
4. 성능
MockK는 Mockito와 비교하여 더 높은 성능을 제공합니다. MockK는 Kotlin의 Inline Function 및 Inline Class 기능을 사용하여 런타임 오버헤드를 최소화하며, 빠른 속도로 테스트를 실행할 수 있습니다.
5. 높은 커버리지
MockK는 Mockito와 같은 다른 모킹 라이브러리보다 더 많은 Kotlin 기능을 지원하여 더 높은 커버리지를 달성할 수 있습니다.
MockK 사용법
이번 포스팅에선 MockK 사용법을 간단히 맛만 보고 다음 포스팅부터 자세하게 알아볼 거다.
의존성 추가
먼저 의존성 추가부터 해주자.
// Gradel Kotlin DSL
testImplementation("io.mockk:mockk:${mockkVersion}")
// Maven
<dependency>
<groupId>io.mockk</groupId>
<artifactId>mockk-jvm</artifactId>
<version>${mockkVersion}</version>
<scope>test</scope>
</dependency>
https://mvnrepository.com/artifact/io.mockk/mockk에서 버전하고 의존성 추가 방법을 확인하자.
오늘 기준으로 최신 버전은 1.13.5다.
간단한 예제
@Test
fun simpleTest() {
val car = mockk<Car>() // mockk 객체 생성
every { car.drive(NORTH) } returns OK // stubbing
car.drive(NORTH) // 위에서 stubbing한 OK 리턴
verify { car.drive(NORTH) } // 호출 검증
}
mockk<Class> 를 이용해서 mock 객체를 생성하고
every를 이용해 스터빙을 하고
verify로 호출 검증을 한다.
우리가 알고있는 mock 객체 생성하고 검증하는 방식 그대로 사용할 수 있다.
다음 포스팅부턴 공식 홈페이지에서 분류해놓은 Top Level Functions, Matchers, Validators, Answers, Answer Scope를 하나씩 뜯어보려고 한다.
댓글