본문 바로가기

유닛테스트

(4)
[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..
[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..