はじめに
あまりテストを書いたことがないなぁということで休み中に Unit テストの Codelab をやってみました。
実際に手を動かしてみて自分的に学びになった箇所や途中で詰まった箇所をまとめたいと思います。
Advanced Android in Kotlin 05.1:Testing Basics
気になったところ
Page6
-
Hamcrest
を導入する場合はこちら を参照する- 今回は2022/05/29時点で最新の
1.3
を導入 - Hamcrest を使う際に
assertThat
とMatcher(is)
を使おうとしたらうまく import に引っ掛からなかったので以下を手動で入れた。import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers. `is`
- 今回は2022/05/29時点で最新の
※自分は Hamcrest
の `is`
が辛そうだなと感じたので Truth を導入しました。
Page7
- 業務でまずどこからテストを書こうってなったら、
ViewModel
だけにしかないロジックのテストを書くことから始めると良いのかもと思った。 - 依存関係の設定が何を追加すれば良いのか分かりにくかった
- Step3 に記載されているライブラリと
Robolectric
を個別で入れれば動く
- Step3 に記載されているライブラリと
- AndroidX Test は Local Test でも InstrumentedTest でもどちらでも同じライブラリで動くので個別でテストごとの作法を覚える必要がない。
- TestRunner とは JUnit がテストを実行するための JUnit のコンポーネントでこれがないとテストが実行されないらしい。
- LocalUnitTest でも
RunWith(AndroidJUnit4::class)
を使って Android のリソースを使ったテストが可能
- LocalUnitTest でも
Page9
-
LiveData
を使ったテストを書く場合は@get:Rule
アノテーションを使って、InstantTaskExecutorRule
を呼び出す- バックグラウンドで実行されるアーキテクチャコンポーネントの処理が同一のスレッド上で実行されるようになるので、実行可能な順序でテスト中は実行されるようになる
-
LiveData
のテストをする際にobserve
を使うとLifecycleOwner
が渡せないので、observeForever
を使うとよい。- Transformations を使用していた場合は特に重要らしい。
-
LiveDataTestUtil.kt
について-
LiveData
から値を取得するための処理で、値が取れるまでCountDownLatch
で待ってくれる - https://medium.com/androiddevelopers/unit-testing-livedata-and-other-common-observability-problems-bb477262eb04
-
最後に
今回の Codelab だけだと viewModelScope
を使ったテストはまだできないようなので、次の Codelab もやっていきます。