안드로이드 Unit Test, Mockito-Kotlin vs MockK: 당신에게 맞는 Mocking 라이브러리는? ⚔️

제주조아
5 min readAug 9, 2024

--

안드로이드 앱 개발에서 빼놓을 수 없는 것, 바로 Unit Test죠! 🧪 Unit Test를 작성할 때, 외부 의존성을 가진 코드를 테스트하기 위해 Mocking 라이브러리를 사용하는 경우가 많은데요. Kotlin 개발자들에게 사랑받는 Mocking 라이브러리로는 Mockito-KotlinMockK가 있습니다. 그렇다면, Mockito-Kotlin과 MockK 중 어떤 라이브러리를 선택해야 할까요? 🤔

이 글에서는 두 라이브러리의 특징들을 비교 분석하여, 여러분의 프로젝트에 가장 적합한 Mocking 라이브러리를 선택하는 데 도움을 드리겠습니다.

Mockito-Kotlin: Java Mockito의 Kotlin 친화적 버전 🤝

Mockito는 Java 에서 가장 널리 사용되는 Mocking 라이브러리입니다. Mockito-Kotlin은 이 Mockito를 Kotlin에서 더 편리하게 사용할 수 있도록 Kotlin 확장 함수와 DSL을 제공하는 라이브러리입니다. Mockito-Kotlin의 주요 특징:

  • Java Mockito와의 호환성: 기존 Java 프로젝트에서 Mockito를 사용하고 있다면, Mockito-Kotlin을 도입하여 Kotlin 코드에서도 동일한 Mocking 방식을 사용할 수 있습니다.
  • Kotlin 친화적인 문법: whenever, verify, argumentCaptor 등 Kotlin 확장 함수를 사용하여 Mocking 코드를 더욱 간결하고 읽기 쉽게 작성할 수 있습니다. 간단한 사용 예시:
val mockRepository = mock<MyRepository>()
whenever(mockRepository.getData()).thenReturn("Hello")

// 테스트 코드 작성
val result = myUseCase.execute()

// 검증
assertEquals("Hello", result)
verify(mockRepository).getData()

MockK: Kotlin을 위한 순수 Mocking 라이브러리

MockK는 Kotlin 언어를 위해 처음부터 새롭게 설계된 Mocking 라이브러리입니다. Kotlin의 특징들을 적극 활용하여, 더욱 강력하고 유연한 Mocking 기능을 제공합니다. MockK의 주요 특징:

  • Kotlin 코루틴 지원: coEvery, coVerify 등 코루틴을 위한 Mocking 함수를 제공하여 비동기 코드를 쉽게 테스트할 수 있습니다.
  • Property Mocking: 클래스의 프로퍼티를 직접 Mocking 할 수 있어, 더욱 유연한 테스트 케이스 작성이 가능합니다.
  • Relaxed Mock: 기본적으로 모든 함수 호출에 대해 기본값을 반환하도록 설정되어 있어, 불필요한 Mocking 코드를 줄일 수 있습니다. 간단한 사용 예시:
val mockRepository = mockk<MyRepository>()
every { mockRepository.getData() } returns "Hello"

// 테스트 코드 작성
val result = myUseCase.execute()

// 검증
assertEquals("Hello", result)
verify { mockRepository.getData() }

비교 분석: 어떤 라이브러리가 더 나을까? 📊

  • 사용 방법: Mockito-Kotlin은 Java Mockito와 유사하며 Kotlin 확장 함수를 제공하는 반면, MockK는 Kotlin DSL 기반으로 코루틴 지원을 특징으로 합니다.
  • 커뮤니티 규모: Mockito-Kotlin은 Java Mockito의 넓은 사용자 기반을 바탕으로 하고, MockK는 비교적 최신 라이브러리이지만 빠르게 성장하는 커뮤니티를 가지고 있습니다.
  • 테스트 코드 성능: 일반적으로 Mockito-Kotlin이 MockK보다 약간 빠른 성능을 보입니다. MockK가 약간 느릴 수 있습니다.

결론:

  • Java Mockito에 익숙하다면? -> Mockito-Kotlin을 선택하는 것이 자연스럽습니다.
  • Kotlin 코루틴을 많이 사용한다면? -> MockK의 코루틴 지원 기능이 유용할 것입니다.
  • 최신 Kotlin 기능을 적극 활용하고 싶다면? -> MockK를 고려해 볼 만합니다.
  • 테스트 코드 성능이 중요하다면? -> Mockito-Kotlin이 약간 더 유리할 수 있습니다.

마무리: 프로젝트에 맞는 최고의 선택을! 🎉

Mockito-Kotlin과 MockK는 모두 훌륭한 Mocking 라이브러리입니다. 어떤 라이브러리가 더 낫다고 단정할 수는 없으며, 프로젝트의 특성과 개발팀의 선호도에 따라 적합한 라이브러리를 선택하는 것이 중요합니다. 두 라이브러리의 장단점을 잘 이해하고, 프로젝트에 가장 적합한 Mocking 라이브러리를 선택하여 효율적인 Unit Test를 작성해 보세요! 😊

참고

MockK 공식 문서 이 글이 안드로이드 Unit Test를 위한 Mocking 라이브러리 선택에 도움이 되었기를 바랍니다! 😉

--

--