ViewModelのUnitTest
Seo-4d696b75 opened this issue · comments
🔍 ViewModelのユニットテストを追加します
課題内容
- 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が利用できない
ネットワーク通信に限らず、テストでは対象以外の依存をモック(代わりのインスタンス)に差し替えることでテスト対象に関心を集中させます 😎