영어 데일리

Mockk을 사용한 네트워크 응답 페이킹

현욱 정리장 2025. 2. 6. 16:23

https://proandroiddev.com/faking-network-responses-with-mockk-featuring-ktor-5e5dc11dc95f

 

Faking Network Responses with MockK (Featuring Ktor)

Speed up Android tests by mocking network calls with MockK. Eliminate flaky tests and server dependencies. Practical guide with examples.

proandroiddev.com

 

소개

너가 안드로이드 앱을 빌드하거나, 또는 심지어 크로스플랫폼 코틀린 멀티 프로젝트를 만들때도 네트워크 호출에 의존합니다. 

항상 실제 서버를 호출하면 속도가 느려지고 신뢰성이 떨어질 수 있습니다. 특히 테스팅 할 동안에는요.

 

Mockk과 Koin의 결합, 그리고 Ktor까지 너는 네트워크 응답에 대해 가짜데이터를 받을 수 있고, 테스트와 개발을 부드럽고 신뢰성있게 할 수 있습니다. 심지어 오프라인때도요. 

 

노트: 비록 이 기사에서는 ktor을 사용할지라도 (왜냐면 코틀린에 친숙하고, KMM에 퍼펙트하기에) mockk + koin 접근 방법은 어떠한 네트워크 라이브러리 , OkHttp, Retrofit, 그외등등 접근을 쉽게 해줍니다. 네트워크 호출을 인터페이스 (APiService)로 감싸기만한다면, 필요에 따라 목 또는 실제 구현을 교체할 수 있습니다. 

 

 

Mockk 들어가기

Mockk은 코틀린의 첫번째 모킹 라이브러리고 다음과 같은 항목을 제공합니다.

  • 코틀린 네이티브 지원: 코루틴과 고급 코틀린 기능에 mockk 을 다룰수 있습니다.
  • syntax가 깔끔합니다. :every {}, returns...를 사용하여 mock 객체가 어떻게 응답할지 정의하고, verify/coVerify를 사용하여 호출이 발생했는지 확인합니다. 
  • 유연한 옵션:  relaxed와 같은 mocks은 보일러플레이트를 줄여주고, coVerify는 suspend 함수입니다. 

mockk은 순수한 코틀린으로 작성되었기에 종종 자바 기반 라이브러리보다 더 근본이라고 느낄수있습니다. 특히 기본안드로이드와 kmm프로젝트에서요.

 

 

왜 Ktor인가? 

Ktor은 http api 를 사용할때 코틀린 네이티브 프레임워크에서 사용됩니다.  이것은 JVM, Android, iOS 그외에서 동작합니다. 안드로이드 앱에서는 아마도 너는 http client 를 사용할텐데, KMM 프로젝트에서는 네트워크 로직을 멀티플랫폼에서 공유할 수 있습니다.

  • 순수한 코틀린: KMM에 완벽하게 적합합니다. 네트워킹을 위한 플랫폼별 브리징 이 필요하지 않습니다. 
  • 가볍고, 컴포저블 합니다: 로깅과, json 파싱, 타임아웃같은 파이프라인 기능을 제공합니다
  • 멀티플랫폼: 같은 코드로 안드로이드 ,iOS, 데스크탑, 서버 베이스 프로젝트에 호환이 가능합니다

mockk을 사용하여 ktor 가짜 응답을 만들면, 실제 네트워크 요청을 효율적으로 우회하고, 마치 ktor이 콜한것처럼 데이터를 반환할 수 있습니다. 즉 실제 서버를 거치지 않고도 테스트가 가능해집니다. 이 시너지는 테스트를 더 빠르게 만들고, 신뢰성있게 하고,안드로이드와 kmm환경에서  유지보수하기 쉽게 만들어줍니다. 

 

 

Mockito vs Mockk

전통적으로 Mockito는 자바 기반 목 테스트의 대표적인 솔루션이였고, 이것은 코틀린에서 약간의 추가적인 스텝을 적용하면 동작했습니다. (인라인 활성화, mocking 그리고 코틀린 익스텐션), 하지만 mockk은

  • 코틀린 네이티를 지원: suspend 함수, 확장 함수, 기타.
  • relaxed mocks 제공함으로써 보일러플레이트 감소
  • 주로Mock은 우회적인 해결책이 적게 필요하기 때문에, 자바 중심의 가정이 꺠질 수 있는 코틀린 멀티플랫폼 코드에서 특히 매력적입니다.

 

 

기타

 

although 비록~일지라도 

pure 순수 

consuming 소비하는것, 사용하는 거

short-circuit 우회하다 

historically 전통적으로

tends to 주로 ~ 하는 경향이 있다