본문 바로가기
Android/Unit Test

[Android] Unit Test 작성하기 -3

by startSW 2023. 9. 22.

https://swjsw.tistory.com/22

 

[Android] Unit Test 작성하기 -2

https://swjsw.tistory.com/21 [Android] Unit Test 작성하기 -1 아래 글은 이전에 작성한 ViewModel 클래스를 참고로 작성되었습니다. https://swjsw.tistory.com/20 [Android] Livedata 사용하기 아래 글은 이전에 작성한 ViewMo

swjsw.tistory.com

 

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()
        }
    }
  • 테스트가 모두 패스되는 것을 확인할 수 있습니다.