LiveData&CoroutinesのUnitテスト
Env
Kotlin 1.3.0-rc-57
kotlinx.coroutines 0.26.1-eap13
Architecture Components 1.1.1
Mockito-Kotlin 2.0.0-RC2
TL;DR
Architecture Components用のテストライブラリを導入する
testImplementation "android.arch.core:core-testing:1.1.1"
テストルールを書く
@get:Rule val rule: TestRule = InstantTaskExecutorRule()
コルーチンの実行スレッドを切り替える
Dispatchers.Unconfined or runBlocking {}
Test target
今回は、購入履歴をAPIから取ってきて、ViewModelに渡して、DataBindingを使って表示する というケースを前提としています。
また、取得中はプログレスを表示したいので、Loadingという状態を管理するようにします。
Test code
余談
RxAndroidPluginみたいに、DIしないでも実行スレッドを切り替えられないかなと探してみました。
UI android context and Looper.getMainLooper() not mocked · Issue #102 · Kotlin/kotlinx.coroutines
素直にDIしろってことですね、わかります。
Jake神がそういうなら仕方ないxD