👌
Flutterの新しいIntegration Testの導入
背景
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で実行。
参考
追記
以下に、スクリーンショットが撮れそうな記述がある。
実施すると「プラットフォームがサポートしていない」と言われた。WindowsでAndroidエミュレータ、MacでiPhone実機で実施した。
ちゃんとAndroidやiOSの設定をすれば、動くのだろうか、、、
追記2
Flutterのテストにご興味のある方は、以下の講座を参考にしてください!
Discussion