ロジックは単体テスト、画面はスナップショットや UI テスト。端末の違いはクラウドの端末で確かめる。
アプリは出した後にすぐ直せないので、リリース前のテストの重みが Web より大きくなります。ただし、画面を動かすテストは遅くて壊れやすいので、粒度ごとにバランスよく持ちます。
テストの粒度
| 粒度 | 道具の例 | 向いている対象 |
|---|---|---|
| 単体テスト | iOS:XCTest・Swift Testing。Android:JUnit(必要なら Robolectric) | ViewModel・計算・データの変換。速く、一番多く書く |
| 結合テスト | テスト用の偽の API、メモリ上の DB | Repository と DB・通信のつながり、マイグレーション |
| UI テスト | iOS:XCUITest。Android:Compose UI Test・Espresso | ログイン・購入など大事な流れだけ |
| スナップショットテスト | 画面の画像を前回と比べるライブラリ | 見た目の崩れ・ダークモード・文字の大きさ |
テストしやすくするには、ViewModel が通信や DB を直接作らず、外から渡してもらう(DI)形にしておきます。時間や乱数も差し替えられるようにすると、結果が安定します。
面接ではこう答える
アプリは出した後にすぐ直せないので、リリース前のテストの重みが Web より大きくなります。ViewModel や計算は速い単体テストで一番多く書き、Repository と DB・通信のつながりやマイグレーションは結合テスト、ログインや購入など大事な流れだけを遅い UI テストで確かめ、見た目の崩れはスナップショットテストで見ます。テストしやすくするには、ViewModel が部品を外から受け取る形にし、時間や乱数も差し替えられるようにします。
Appとの関わりテストの方針を決めるときと、リリースの品質を保つ仕組みを説明するときに使います。