【Flutter】integration_testを使ってみた

に公開

はじめに

Flutter アプリ開発において、統合テスト(インテグレーションテスト)は重要です。この記事では、integration_testパッケージを使用して、実際のデバイスやエミュレーターでアプリの機能をテストする方法をメモとして記しておきます。

https://docs.flutter.dev/testing/integration-tests

統合テストとは

統合テストは、アプリ全体の機能が正しく動作することを確認するためのテストです。ボタンのタップや画面の遷移など、ユーザーの操作を模倣してアプリの挙動をテストします。

初回立ち上げ時のカウンターアプリ

lib/main.dartを開き、以下のようにフローティングアクションボタンにkeyパラメータを追加します。

https://github.com/muranakar/flutter_integration_test/blob/main/lib/main.dart#L118-L123

ポイント:ウィジェットにキーを設定すると、テスト時に特定のウィジェットを見つけやすくなります。

統合テストの依存関係追加

統合テストを実行するために必要なパッケージを追加します。

ターミナルコマンド
flutter pub add 'dev:integration_test:{"sdk":"flutter"}'

これにより、pubspec.yamlファイルに以下の依存関係が追加されます:

https://github.com/muranakar/flutter_integration_test/blob/main/pubspec.yaml#L38-L49

統合テストファイルの作成

次に、統合テスト用のディレクトリとファイルを作成します。

  1. プロジェクトのルートにintegration_testというディレクトリを作成
  2. その中にapp_test.dartというファイルを作成
counter_app/
  lib/
    main.dart
  integration_test/
    app_test.dart

統合テストの記述

app_test.dartファイルに以下のコードを追加します。このテストはカウンターアプリの基本的な機能をテストします。

https://github.com/muranakar/flutter_integration_test/blob/main/integration_test/app_test.dart#L1-L27

このテストコードでは以下の 3 つのステップを行っています:

  1. IntegrationTestWidgetsFlutterBindingを初期化
  2. WidgetTesterクラスを使ってウィジェットとの対話とテスト
  3. テスト実行

統合テストの実行

統合テストは以下のようなプラットフォームで実行できます:

  • デスクトッププラットフォーム(macOS、Windows、Linux)
  • モバイルプラットフォーム(Android、iOS)
  • Web ブラウザ
  • Firebase Test Lab(Android、iOS)

今回は iOS 端末のみ検証します。

iOS デバイスでのテスト

iOS デバイスを接続し、以下のコマンドを実行します:

ターミナルコマンド
flutter test integration_test/app_test.dart

実行するとシュミレーターが起動し、ボタンをタップして自動的にテストを実行します。

画像のような出力結果が得られれば、テスト成功です。

ターミナルコマンド
flutter test integration_test

を実行すると、integration_test ディレクトリ内に存在するテストファイルをすべて実行します。

今回用いたコード

https://github.com/muranakar/flutter_integration_test/tree/main

Discussion