👌

Flutterの新しいIntegration Testの導入

2021/08/22に公開

背景

FlutterのIntegration Test(統合テスト。エミュレータや実機で実際の動作を指示してテストを行う)として、今まで flutter_driver パッケージを使用してきた。しかし、(多分)2021年4月頃に新しくintegration_testパッケージが導入された。使用したので、導入方法と感想を書きます。

特徴

flutter_driverと比較して、良い点・悪い点を示す。

良い点

  • Widget Testと同じ形式とテストできるようになった(finderの種類が豊富)
  • Firebase Test Labで実施が可能
  • 右クリックで簡単にテストを実行&デバッグ

悪い点

スクリーンショットが撮影できない(2021/08/22現在。将来的には実装されると思いますが)

実施

インストール

dev_dependencies:
  integration_test:
    sdk: flutter

を追加して、pub getを実施する。

ドライバーの作成

プロジェクトの直下に test_driver のディレクトリを作成する。その中にintegration_test.dartを作成する。

test_driver/integration_test.dart
import 'package:integration_test/integration_test_driver.dart';

Future<void> main() => integrationDriver();

テストの作成

プロジェクトの直下に integration_test のディレクトリを作成する。その中に<test>_test.dart(例:hoge_test.dart)を作成する。

integration_test/hoge_test.dart
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';

import 'package:integration_test_sample/main.dart' as app;

void main() {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();

  group('group', () {
    testWidgets('start', (WidgetTester tester) async {
      app.main();
      await tester.pumpAndSettle();

      expect(find.byType(FloatingActionButton), findsOneWidget);

      expect(find.text('0'), findsOneWidget);
      expect(find.text('1'), findsNothing);

      await tester.tap(find.byType(FloatingActionButton));
      await tester.pump();

      expect(find.text('1'), findsOneWidget);
      expect(find.text('0'), findsNothing);
    });
  });
}

テストの実行

Terminal から、
flutter drive --driver=test_driver/integration_test.dart --target=integration_test/<test>_test.dart
もしくは、
Android Studioで右クリックして、RunやDebugで実行。

参考

Integration testing

追記

以下に、スクリーンショットが撮れそうな記述がある。
https://github.com/flutter/flutter/tree/master/packages/integration_test

実施すると「プラットフォームがサポートしていない」と言われた。WindowsでAndroidエミュレータ、MacでiPhone実機で実施した。
ちゃんとAndroidやiOSの設定をすれば、動くのだろうか、、、

追記2

Flutterのテストにご興味のある方は、以下の講座を参考にしてください!
https://www.udemy.com/course/flutter-tdd/?referralCode=FE3C07742D886A9E9E6A

Discussion