Integration Testの基本
Integration Testを色々調べて書いているうちに量が多くなってきたので基本部分だけ記事を分けました。
こちらは良く書かれている事ばかりですが、おさらいの意味で書きました。
flutter_driverライブラリを追加
pubspeck.yaml
に以下のように記載します。
dev_dependencies:
flutter_driver:
sdk: flutter
基本のディレクトリ構造
lib
res
test
test_driver
|____●●●.dart
|____●●●_test.dart
test_driver
のディレクトリを作成
各ファイルの設定
●●●.dart
と ●●●_test.dart
というファイルを作成します。※ ●●●は共通
●●●.dart
●●●_test.dart
WebViewの簡単なサンプルアプリです。
下記のコードのRaisedButtonウィジェットにkeyプロパティを設定しています。
Keyクラスの引数に名前を入れるとその名前でアクセスできるようになります。
- main.dart
import 'package:flutter/material.dart';
import 'package:flutter_webview/pages/web_view.dart';
void main() => runApp(new MaterialApp(
title: 'Navigation with Routes',
routes: <String, WidgetBuilder> {
'/': (BuildContext context) => Home(),
'/webView': (BuildContext context) => Browser()
},
));
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: const Text("Home"),
),
body: new Center(
child: new RaisedButton(
// keyを設定
key: Key('openPage'),
child: const Text("Launch Next Screen"),
onPressed: () {
// WebView画面へ
Navigator.of(context).pushNamed("/webView");
},
),
),
);
}
}
- main.dartの記述例
import 'package:flutter_driver/driver_extension.dart';
import 'package:sample/main.dart' as app;
void main() {
// Flutter driver機能をONにする
enableFlutterDriverExtension();
// メインアプリを起動する
app.main();
}
- main_test.dartの記述例
// Imports the Flutter Driver API
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';
void main() {
group('Counter App', () {
final counterTextFinder = find.byValueKey('openPage');
FlutterDriver driver;
setUpAll(() async {
driver = await FlutterDriver.connect();
});
tearDownAll(() async {
if (driver != null) {
driver.close();
}
});
// ボタンをタップ
test('starts at 0', () async {
await driver.tap(openPageFinder);
});
});
}
- テスト方法
以下のコマンドにてテスト。
#flutter drive --target=test_driver/main.dart
参考文献
Flutterの3種類のソースコードテスト(Unit Test, Widget Test, Integration Test)についてのまとめ