선생님, 개발을 잘하고 싶어요.

[테스트] 코루틴, viewModelScope 를 테스트 하는 방법 본문

개발/android 개발

[테스트] 코루틴, viewModelScope 를 테스트 하는 방법

알고싶은 승민 2020. 4. 5. 16:21

https://medium.com/androiddevelopers/easy-coroutines-in-android-viewmodelscope-25bffb605471 > 이 포스팅 내용이 훨씬 좋습니다. 이거 확인 고고


도입

 즐겁게 Coroutine 을 적용하고, ViewModel 테스트 코드를 작성한 찰나 테스트가 실패하는 경우가 발생하니

 

바로, viewModel 의 viewModelScope 때문이다. viewModelScope.launch 로 코루틴 을 실행하지 않고, runBlocking 으로 테스트 쓰레드를 막으면 테스트가 원하는 대로 동작하지만, 실제로 앱을 키면 에러가 나게 된다.

 

해결

코루틴 테스트 지원 라이브러리를 사용한다.

 

1. gradle (app 단위)에 라이브러리를 추가한다.

dependencies {
    testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.5'
}

 

2. @Before 코드에서 테스트 쓰레드를, 메인 쓰레드로 지정한다.

val mainThreadSurrogate = newSingleThreadContext(HabitViewModelTest::class.java.simpleName)

@Before
fun setup() {
    // https://github.com/Kotlin/kotlinx.coroutines/tree/master/kotlinx-coroutines-test
    // 테스트 할 코드가 동작하는 코습관 동작을 테스트 스레드로 지정한다.
    Dispatchers.setMain(mainThreadSurrogate)
}

 

 

3. @After 코드에서 메인 쓰레드를 원상복구 시킨다.

@After
fun tearDown() {
    Dispatchers.resetMain()
}

 

이제 편안하게 ViewModel 테스트 코드를 작성하면 된다. :)

Comments