본문 바로가기

ANDROID/Testing

(7)
[Android/Testing] Hot StateFlow의 유닛 테스팅 in ViewModel 이제 LiveData의 시대가 가고 자연스레 Flow의 시대가 도래한 듯 하다. LiveData와 마찬가지로 동적인 속성을 가진 Flow의 테스팅을 위해서는 일련의 설정이 필요한데, 해당 포스트에서는 다루는 빈도가 많을 Hot StateFlow의 Unit-Test 설정 및 방식을 정리하려 한다. Dependencies org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3 org.jetbrains.kotlinx:kotlinx-coroutinesandroid:1.7.3 kotlin = "1.8.10" Testing 1. Before, After Annotation으로 테스트 전후 Dispatcher를 UnconfinedTestDispatcher로, 테스트 이후 이를 초..
[Testing/Unit-test] Context를 포함하는 ViewModel의 Unit Test Problem 유닛테스트를 신규로 도입하게 되면 Testable 하지 않은 프로젝트 코드들과 마주하게 될 때가 있다. 아마 가장 손쉽게 맞닥뜨리게 되는 이슈는 Context를 인자로 받는 ViewModel일 것이다. ViewModel이 Context를 포함해야 하느냐는 논의에 앞서 , 기존 코드를 건드리지 않은 채 테스트 커버리지를 확보하는 방법에 대해 짧게 정리하려 한다. Environments - Kotlin 1.5.21 - Koin 3.1.2 - Mockito 4.2.0 Soluton 1. Context를 Mockito를 사용해 Mock 한다. @Mock lateinit var mockedContext: Context 2. Mocking한 context로부터 필요로 하는 사항에 대한 상세사항을 추가..
[Kotlin/UnitTesting] LiveData Mocking하기 유닛 테스트를 신나게 적용하다 보면, 검증해야 하는 변수나 결과가 LiveData와 맞물려 들어가는 로직과 맞닥뜨릴 수 있다. 여기서 특정 결과값이 특정 LiveData를 Observing하는 방식으로 도출된다면, Mocking하는 것도 쉽지 않을 것이다. 이런 케이스를 해결하기 위해 실 Stub LiveData를 만들어 초기값을 넣어줌으로써, 본래 수행하려던 테스트 케이스를 성공적으로 돌릴 수 있었다! 사용 예를 남기고자 Pizza라는 data class를 담는 LiveData를 예시로 테스트 코드를 작성해보겠다. 테스트 환경은 아래와 같다. Mockito LiveDataTesting https://github.com/jraska/livedata-testing Koin DI Coroutine Clean..
[안드로이드] 람다 Function을 파라미터로 가지는 로직의 Unit Testing! 자바에서 코틀린으로 넘어오면서 람다 식은 이제 부수적으로 쓴다기보단 항상 쓰게되는 부분 중에 하나가 되었다. 람다식을 단순히 이용할 때엔 간결하고 쉽게 사용이 가능하지만, 유닛 테스팅에 사용할 때, 특히 람다 Function을 파라미터로 포함한 function을 테스트해야 될 때는 이를 어떻게 Mock 해야 하는지, 가능은 한지에 대해서 머리를 싸매고 있었다. 결국에 개발이란 안 되는 건 없고, 방법을 찾지 못한 것이라는 말이 사실이었던 걸까, 방법은 있었다. mockito의 when 문을 이용해서 특정 function을 call 할때와, 이를 call 한 경우의 동작을 정의할 수 있는 것이었다. 방식은 아래와 같다. 우선 아래와 같은 클래스와 function을 예로 들어보겠다. class sampleC..
[안드로이드/Firebase] adb를 Android studio 터미널에 설정하기, adb 이용해 Firebase event 디버깅하기 Firebase analytics는 앱으로부터 입력받은 다양한 이벤트를 기반으로 사용자 분석을 돕는 유용한 툴이다. 다만 개발자가 지정한 이벤트가 의도한대로 올바르게 들어오는지에 대해서는 로컬에서 확인하기가 어려울 수 있다. 이를 위해 Firebase는 DebugView라는 기능을 제공한다. adb(Android Debug Bridge)를 이용해 원하는 디바이스를 Firebase Debug View에서 모니터링 할 수 있도록 설정하고 나면, 앱을 실행해 사용하는 중에 들어오는 이벤트를 실시간으로(물론 서버를 거치기 때문에 딜레이가 조금 있다.)확인이 가능하다. 그것도 아주 이쁘게. 그렇다면 우선 adb를 안드로이드 스튜디오에 설정하고, 다음 DebugView에서 기기를 보기 위한 명령어를 살펴보겠다. 1..
[Jacoco] Jacoco와 gradle로 프로젝트 코드 커버리지 확인하기(Gradle 3.6 버전 이상의 경우) Unit test를 도입하게 되면서 같이 도출하고 싶어 했던 지표는 물론 프로젝트의 코드 커버리지였다. 전반적인 프로젝트가 얼마나 테스트 되었는지, 어디가 테스트가 부족한지를 쉽게 알 수 있는 코드 커버리지 도출은 필요한 것이고 직접 눈으로 보고 싶은 것이기도 했다. (배그 한판이 끝날 때마다 OPGG를 리프레시하는 심정이랄까) 0. 실행환경 - 최근 Android studio와 함께 업데이트 된 최신 Gradle Version 3.6.1 이 사용되었다. - 프로젝트의 언어는 Kotlin으로 짜여져있다. 1. 설정하기 app level의 gradle 코드에 아래 코드들을 추가한다. - 기본설정 // jacoco와 application plugin 추가 apply plugin: 'com.android.ap..
[Testing] 테스트 피라미드를 통해 테스팅의 세가지 범주 살펴보기 금번에 신규 업데이트를 준비하면서 이전부터 해보고 싶던 유닛 테스트를 도입해보고자 했고, 팀원들에게 적극 추천해보기로 했다. 우선 추천을 하기 전에 테스팅이 무엇인가, 왜 테스팅을 해야하는가에서 출발하기 위해 자료를 열심히 찾았고 찾아낸 테스트 피라미드를 기점으로 출발점을 가져가기로 했다. 안드로이드 공식 문서에서도 테스팅에 관해 다양한 항목을 통해 심층적으로 다루고 있으니, 이미 테스트 피라미드를 보신 분들은 구글 문서를 통해 더 깊게 배워보는 것이 좋겠다. https://developer.android.com/training/testing/?hl=ko Android에서 앱 테스트 | Android 개발자 | Android Developers Android에서 앱 테스트 Android Jetpack의 ..