Androidアプリの良いユニットテストを考える
www.youtube.com
基本方針は以下で良さそう
- Androidフレームワークに依存したコードと依存していないアプリのロジックを切り離してPure Local Test(Robolectricでない単純なテスト)で実行できるようにする
- Androidフレームワークに依存したコードはRobolectricで実行する
- 上記で不足している箇所をInstrumentation Testで実行する
mockito等のスタブについて
使いすぎるとテストコードと実装が密接に結びついてしまいテストコードのメンテナンスにコストがかかりやすくなるので必要のない箇所では使わない方がいい。
スタブを使うべき箇所として以下があげられていた
- 現在時刻や乱数に依存する箇所
- APIや外部サービス等アプリの外部から入力を受け取る箇所
- BuildConfigなどappモジュールに実態があるものを他モジュールでも参照している箇所
- 発生させるのが難しいエラーをエミュレートしたいとき
- 依存オブジェクトからの非同期処理に対して遅延している状態をエミュレートしたいとき
スパイを使うべき箇所
- APIや外部サービスなどアプリの外部への出力をする箇所
- 依存オブジェクトのメソッドを呼び出す順序や呼び出す回数が重要な箇所
参考資料として挙げられてたテストの書き方について
GitHub - DeNA/android-modern-architecture-test-handson
テスト周りは公式ドキュメントも含めて色々覚える必要がある