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로부터 필요로 하는 사항에 대한 상세사항을 추가로 mocking 한다.
`when`(mockedContext.getString(anyInt())).thenReturn("mockedString")
3. Mock된 context를 ViewModel에 주입한다.
class SampleViewModel(context: Context): ViewModel() {
...
}
...
val viewModel = SampleViewModel(mockedContext)
'ANDROID > Testing' 카테고리의 다른 글
[Android/Testing] Hot StateFlow의 유닛 테스팅 in ViewModel (0) | 2023.08.29 |
---|---|
[Kotlin/UnitTesting] LiveData Mocking하기 (0) | 2022.01.06 |
[안드로이드] 람다 Function을 파라미터로 가지는 로직의 Unit Testing! (0) | 2021.01.11 |
[안드로이드/Firebase] adb를 Android studio 터미널에 설정하기, adb 이용해 Firebase event 디버깅하기 (0) | 2020.12.14 |
[Jacoco] Jacoco와 gradle로 프로젝트 코드 커버리지 확인하기(Gradle 3.6 버전 이상의 경우) (0) | 2020.03.23 |