0
Help us understand the problem. What are the problem?

posted at

updated at

Codelab から ViewModel と LiveData の Unit テストを学ぶ1

はじめに

あまりテストを書いたことがないなぁということで休み中に Unit テストの Codelab をやってみました。
実際に手を動かしてみて自分的に学びになった箇所や途中で詰まった箇所をまとめたいと思います。

Advanced Android in Kotlin 05.1:Testing Basics

気になったところ

Page6

  • Hamcrest を導入する場合はこちら を参照する
    • 今回は2022/05/29時点で最新の 1.3 を導入
    • Hamcrest を使う際に assertThatMatcher(is) を使おうとしたらうまく import に引っ掛からなかったので以下を手動で入れた。
      • import org.hamcrest.MatcherAssert.assertThat
      • import org.hamcrest.Matchers. `is`

※自分は Hamcrest`is` が辛そうだなと感じたので Truth を導入しました。

Page7

  • 業務でまずどこからテストを書こうってなったら、ViewModel だけにしかないロジックのテストを書くことから始めると良いのかもと思った。
  • 依存関係の設定が何を追加すれば良いのか分かりにくかった
    • Step3 に記載されているライブラリと Robolectric を個別で入れれば動く
  • AndroidX Test は Local Test でも InstrumentedTest でもどちらでも同じライブラリで動くので個別でテストごとの作法を覚える必要がない。
  • TestRunner とは JUnit がテストを実行するための JUnit のコンポーネントでこれがないとテストが実行されないらしい。
    • LocalUnitTest でも RunWith(AndroidJUnit4::class) を使って Android のリソースを使ったテストが可能

Page9

  • LiveData を使ったテストを書く場合は @get:Rule アノテーションを使って、 InstantTaskExecutorRule を呼び出す
    • バックグラウンドで実行されるアーキテクチャコンポーネントの処理が同一のスレッド上で実行されるようになるので、実行可能な順序でテスト中は実行されるようになる
  • LiveData のテストをする際に observe を使うと LifecycleOwner が渡せないので、 observeForever を使うとよい。
    • Transformations を使用していた場合は特に重要らしい。
  • LiveDataTestUtil.kt について

最後に

今回の Codelab だけだと viewModelScope を使ったテストはまだできないようなので、次の Codelab もやっていきます。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?