yumemi-inc / android-training-template

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ViewModelのUnitTest

Seo-4d696b75 opened this issue · comments

🔍 ViewModelのユニットテストを追加します

Note

Required(先に完了させましょう)

Next(次に取り組みましょう)

課題内容

  • ViewModelのユニットテストを追加
  • 天気状態の更新を呼び出して成功・失敗のテストケースを追加する
  • ViewModelがFlow・LiveDataで外部に公開している状態の変化を確認できる
  • CI(GitHub Actionsのワークフロー)でテストが自動実行される

Tip

Repositoryを導入している場合、ViewModelはRepositoryの関数を呼び出すだけ&プロパティを公開するだけの実装になっているかもしれません。代わりにRepositoryをテストします。

テストを意識したアプリ設計

テストを書く前提でプログラムを設計していないと、テストはなかなか書きづらいものです。もしテストが書けなかった場合は次のようなリファクタリングをしてみましょう。

  • API呼び出しをViewModelもしくはRepositoryに移動する
  • YumemiWeatherをInterfaceで抽象化して、ViewModelもしくはRepositoryのAPI呼び出しはInterfaceに依存させる
  • ViewModelもしくはRepositoryのコンストラクタにYumemiWeatherなどの依存を渡す

モックの利用

テスト対象のViewModelもしくはRepositoryを動かすためにはAPI呼び出しの実装(YumemiWeatherなど)が必要です。しかしテスト中にネットワーク通信が発生してしまうと様々な外的要因が入ってしまい、テスト対象自体に問題が無くてもテストが失敗する可能性があります 😇

  • ネット接続環境がない
  • 通信がタイムアウトした
  • APIサーバに問題が発生した
  • API keyが利用できない

ネットワーク通信に限らず、テストでは対象以外の依存をモック(代わりのインスタンス)に差し替えることでテスト対象に関心を集中させます 😎

参考資料