android
UnitTest에 LiveData사용시 에러
seoft
2019. 9. 22. 00:32
[문제정의]
ViewModel내 LiveData를 set value하는 부분이있고 unit test 내에서 그 부분이 진행될 경우의 발생되는 에러
E/TestRunner: java.lang.IllegalStateException: Cannot invoke setValue on a background thread at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:461) at androidx.lifecycle.LiveData.setValue(LiveData.java:304) at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
in logcat error |
LiveData는 ObservableField와 달리 VM을 생성한 Activity의 생명주기를 따르게 되고
생명주기를 따르기 위해서 LiveData의 setValue가 내부적으로 mainThread를 사용하기 때문에
일반적인 mock사용시 mainThread가 아닌 환경에서 오류가 발생
@MainThread
in androidx.lifecycle.LiveData |
[문제해결]
1. InstantTaskExecutorRule 클래스 사용을 위한 depdencies 추가
androidTestImplementation 'androidx.arch.core:core-testing:2.1.0'
in build.gradle |
2. Unit Test코드 내 InstantTaskExecutorRule Rule지정
@JvmField
in unit test class |
[관련코드]
https://gist.github.com/seoft/d0f7f5d92cd3df285da0ceef2ab2b304t