Unit Test에서 가장 중요한 suspend 함수 테스트와 ViewModelScop을 사용한 Coroutine이 있는 함수를 어떻게 테스트 하는지 알아보겠습니다.
1. Coroutine Unit Test 라이브러리 Implementation 하기
- App 모듈의 build.gradle에 아래 내용을 추가하고 sync 합니다.
dependencies {
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4")
}
2. ViewModel 에 아래와 같이 suspend 함수와 Coroutine을 사용하는 함수를 추가합니다.
suspend fun turnOnFlashlightWithDelayOneSec() {
delay(1000)
_isFlashlightOn.value = true
}
fun turnOnFlashlightWithDelayTwoSec() = viewModelScope.launch {
delay(500)
_isFlashlightOn.value = true
}
3. Test Class에 테스트 함수를 추가하고 테스트 합니다.
@Test
fun testTurnOnFlashlightWithDelayOneSec() = runTest {
viewModel.turnOnFlashlightWithDelayOneSec()
assertEquals(true, viewModel.isFlashlightOn.getOrAwaitValue())
}
@Test
fun testTurnOnFlashlightWithDelayTwoSec() = runTest() {
val testDispatcher = UnconfinedTestDispatcher(testScheduler)
Dispatchers.setMain(testDispatcher)
try {
viewModel.turnOnFlashlightWithDelayTwoSec()
delay(1000)
assertEquals(true, viewModel.isFlashlightOn.getOrAwaitValue())
} finally {
Dispatchers.resetMain()
}
}
- 테스트가 모두 패스되는 것을 확인할 수 있습니다.
'Android > Unit Test' 카테고리의 다른 글
[Android] Unit Test 작성하기 -5(Mockito-2) (0) | 2023.09.27 |
---|---|
[Android] Unit Test 작성하기 -4(Mockito-1) (0) | 2023.09.27 |
[Android] 구글 Coroutine Test 정리 글 (0) | 2023.09.22 |
[Android] Unit Test 작성하기 -2 (0) | 2023.09.22 |
[Android] Unit Test 작성하기 -1 (0) | 2023.09.22 |