본문 바로가기
Kotlin

[Kotlin] MockK 사용법 (1) - MockK란?

by 노력남자 2023. 5. 1.
반응형

이번 포스팅에서 kotlin 프로젝트에서 테스트 작성할 때 mock 생성을 도와주는 라이브러리인 MockK 사용법을 알아보자.

 

mock에 대해서 옛날에 작성해놓은 포스팅이 있으니 mock이 뭔지 모른다면 보고오자.

 

MockK란?

 

 

MockK

Provides DSL to mock behavior. Built from zero to fit Kotlin language. Supports named parameters, object mocks, coroutines and extension function mocking

mockk.io

 

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를 하나씩 뜯어보려고 한다.

반응형

댓글