🧪
ViewModelをテストする
Androidでテストコードを書く場合はまず、codelabsを探しますが、大抵の場合はそのままでは動きません。
原因としては、Android Studioが新しくなってる(大抵の場合はJDKが新しくなってる)のが原因です。
ということで、下記のcodelabのコードを
Giraffe | 2022.3.1 Patch 4
の環境で動かしてみました(JDKは17)。
結果のコードは下記に置いてあります。
大きな流れとしましては、
-
AGP Upgrade Assistant
を使って、7系から、8.1系まで上げる - kotlinのバージョンを1.5系から1.8系まで上げる
- roomのバージョンは2.3.0 -> 2.4.3に上げる
のような感じです。
テストコードの方はざっとこんな感じです
- instrumentation testではなくunit testの方に置いています。
- Application Contextを利用するための依存関係を追加します。
- InstantTaskExecutorRuleを追加して、Architecture Componentsに関連するバックグランドのジョブを全て同期的に実行されるようにする
- LiveDataをobserveするのに必要なextension functionを追加する
- https://developer.android.com/codelabs/advanced-android-kotlin-training-testing-basics/#8
- observeForeverやCountDownLatchを使っています
LiveDataの動きを確認するだけでかなり大変ですが、ViewModel内に大量のLiveDataがあるプロジェクトでは有用なんではないかと思います。
参考
CountDownLatchを理解するために作ったサンプル
Discussion