flutterにおいてテストってどんなものがあり、各テストはどう有効なのかをまとめました。
公式

Testing Flutter apps
Learn more about the different types of testing and how to write them.
3種類のテスト
前提
- 多くの機能を持ったアプリでは手動でテストをするのが難しい
- 自動テストは以下をサポート
- リリース前にアプリの正常動作するかを担保できる
- 並行して機能開発やバグ改善に取り組む時間を作れる
3つのテスト
- unit test: 関数やメソッド・クラスなどを単体でテスト
- widget test: 各Widgetをテストするflutter独自のテスト(他の言語の場合のcomponent test)
- integration test: テスト大部分を全体的にテストする統合テスト
それぞれの関係性
以下公式記載では、3つのオフはトレードオフで、unit testだとコストが低くすぐに実行できるが、逆にintegration testはコストはかかるがその分安全性は担保できる設計。
| Tradeoff | Unit | Widget | Integration |
|---|---|---|---|
| Confidence | Low | Higher | Highest |
| Maintenance cost | Low | Higher | Highest |
| Dependencies | Few | More | Most |
| Execution speed | Quick | Quick | Slow |
それぞれの役割
別途細かく記事にする予定ですが、それぞれのテストの概要についてまとめています。
unit test
- unit testのゴール
- いろんな条件の中でロジックが問題なく正確に動作するかを確認
- 外部サービスとの依存関係は基本的にモック化して対応
- https://docs.flutter.dev/cookbook/testing/unit/mocking
- 例えばFirebaseを使っている場合、直接呼ぶのではなくモック化して参照
- 通常unit testでは以下を実施しない
- メモリやディスクに対しての読み書き
- Screenのレンダリング
widget test
- widget testのゴール
- 各WidgetのUIが期待通りに表示・動作されることを確認
- flutterのWidgetの構造上で下記を担保する必要がある
- 幾つもの子Widgetを持っており全て正常に動作する
- build → update → dispose などが正しく動作するライフサイクルである必要がある
integration test
- integration testのゴール
- アプリ全体で全てのwidgetや機能が正常に動作することを確認
- アプリのパフォーマンスを検証することも可能
- 通常は実機またはiOS Simulator or Android Emulatorで実施する
まとめ
flutterにおいてテストとはどんな目的で実施されているかをまとめました。
現場では必須と言っても良いが割と敬遠されがちなので、意識してキャッチアップしていきたいですね。
それぞれの詳細についても別途記事にできればと思います。
ではまた。



コメント