Testing Flutter apps翻訳-統合テストの紹介
8284 ワード
翻訳ホームページ
ユニットテストとWidgetテストは、個別のクラス、メソッド、またはWidgetをテストするのに役立ちます.しかし、通常、個別の部分がどのように全体として動作するかをテストしたり、アプリケーションが実際のデバイスで実行されているときのパフォーマンスを表示したりすることはできません.統合テストは、この問題を解決するために使用されます.
統合テストのペア使用:まず、検出されたアプリケーションを実際のデバイスまたはシミュレータに配備し、個別のテストキットのドライバアプリケーションからすべてが正常であることを確認します.
このテストペアを作成するにはflutter_を使用します.driverパッケージ.検出プログラムを作成し、テストキットからこれらのプログラムを駆動するツールを提供します.
本稿では、カウンタアプリケーションをテストする方法について学習します.統合テストを設定する方法、アプリケーションに表示される特定のテキストを検証する方法、特定のWidgetsをクリックする方法、統合テストを実行する方法を示します.
手順:テストするアプリケーションを作成する を追加テストファイル を作成するアプリケーション の確認統合テストコード を記述する統合テスト を実行
1.テストするアプリケーションの作成
最初のファイルには、アプリケーションの「検出済み」バージョンが含まれています.この検出により、アプリケーションを「駆動」し、テストコンポーネントのパフォーマンス分析を記録できます.この書類はいかなる合理的な名前をつけることができる.この例では、作成されたファイル名は の2番目のファイルには、アプリケーションを駆動し、アプリケーションが予想通りに正常に動作しているかどうかを確認するテストコンポーネントが含まれています.このテストコンポーネントは、パフォーマンス分析も記録できます.このテストファイルの名前は、検出されたアプリケーションを含む名前に対応し、ファイル名の後に
現在のディレクトリ構造は次のとおりです.
4.アプリケーションの確認
flutter driver拡張 を有効にするアプリケーション を実行
次のコードを
5.統合テストコードの作成
は、特定のWidgetを検索するために は、 重要シーンのテスト 私たちのテストが完了した後、
6.統合テストの実行
は、 アプリケーションをロードします.
ユニットテストとWidgetテストは、個別のクラス、メソッド、またはWidgetをテストするのに役立ちます.しかし、通常、個別の部分がどのように全体として動作するかをテストしたり、アプリケーションが実際のデバイスで実行されているときのパフォーマンスを表示したりすることはできません.統合テストは、この問題を解決するために使用されます.
統合テストのペア使用:まず、検出されたアプリケーションを実際のデバイスまたはシミュレータに配備し、個別のテストキットのドライバアプリケーションからすべてが正常であることを確認します.
このテストペアを作成するにはflutter_を使用します.driverパッケージ.検出プログラムを作成し、テストキットからこれらのプログラムを駆動するツールを提供します.
本稿では、カウンタアプリケーションをテストする方法について学習します.統合テストを設定する方法、アプリケーションに表示される特定のテキストを検証する方法、特定のWidgetsをクリックする方法、統合テストを実行する方法を示します.
手順:
flutter_driver
依存1.テストするアプリケーションの作成
まず、テスト用のアプリケーションを作成します.この例では、flutter create
コマンドによって作成されたカウンタアプリケーションをテストします.このアプリケーションでは、ユーザーがボタンをクリックしてカウントを増やすことができます.さらに、ValueKey
をText
およびFloatingActionButton
Widgetsに提供します.これにより、テストキットでこれらの特定のWidgetsを識別し、インタラクティブにすることができます.import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Counter App',
home: MyHomePage(title: 'Counter App Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
// Provide a Key to this specific Text Widget. This allows us
// to identify this specific Widget from inside our test suite and
// read the text.
key: Key('counter'),
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
// Provide a Key to this the button. This allows us to find this
// specific button and tap it inside the test suite.
key: Key('increment'),
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
2.flutter_を追加driver依存項目
次に、統合テストを書くにはflutter_driver
パッケージが必要です.pubspec.yaml
ファイルのdev_dependencies
の下にflutter_driver
依存を追加します.
実際のテスト関数と断言を使用するために、test
依存も追加します.dev_dependencies:
flutter_driver:
sdk: flutter
test: any
3.テストファイルの作成
ユニットテスト、Widgetテストとは異なり、統合テストコンポーネントはテストされたアプリケーションと同じプロセスで実行されません.したがって、同じディレクトリに2つのファイルを作成する必要があります.慣例に従って、このディレクトリの名前はtest_driver
です.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Counter App',
home: MyHomePage(title: 'Counter App Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
// Provide a Key to this specific Text Widget. This allows us
// to identify this specific Widget from inside our test suite and
// read the text.
key: Key('counter'),
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
// Provide a Key to this the button. This allows us to find this
// specific button and tap it inside the test suite.
key: Key('increment'),
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
次に、統合テストを書くには
flutter_driver
パッケージが必要です.pubspec.yaml
ファイルのdev_dependencies
の下にflutter_driver
依存を追加します.実際のテスト関数と断言を使用するために、
test
依存も追加します.dev_dependencies:
flutter_driver:
sdk: flutter
test: any
3.テストファイルの作成
ユニットテスト、Widgetテストとは異なり、統合テストコンポーネントはテストされたアプリケーションと同じプロセスで実行されません.したがって、同じディレクトリに2つのファイルを作成する必要があります.慣例に従って、このディレクトリの名前はtest_driver
です.
test_driver/app.dart
です._test
を末尾として追加する必要があります.作成された2番目のファイルの名前はtest_driver/app_test.dart
です.現在のディレクトリ構造は次のとおりです.
counter_app/
lib/
main.dart
test_driver/
app.dart
app_test.dart
4.アプリケーションの確認
これで、このアプリケーションを検出できます.これには、次の2つのステップが含まれます.
次のコードを
test_driver/app.dart
ファイルに書きます.import 'package:flutter_driver/driver_extension.dart';
import 'package:counter_app/main.dart' as app;
void main() {
// This line enables the extension
enableFlutterDriverExtension();
// Call the `main()` function of your app or call `runApp` with any widget you
// are interested in testing.
app.main();
}
5.統合テストコードの作成
検出可能なアプリケーションがあります.テストコードを書くことができます.これには、次の4つのステップが含まれます.
SeralizableFinders
を作成する.setUpAll
関数を実行する前に、私たちのテストをアプリケーションに接続します.teardownAll
関数でアプリケーションとの接続を切断します.// Imports the Flutter Driver API
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';
void main() {
group('Counter App', () {
// First, define the Finders. We can use these to locate Widgets from the
// test suite. Note: the Strings provided to the `byValueKey` method must
// be the same as the Strings we used for the Keys in step 1.
final counterTextFinder = find.byValueKey('counter');
final buttonFinder = find.byValueKey('increment');
FlutterDriver driver;
// Connect to the Flutter driver before running any tests
setUpAll(() async {
driver = await FlutterDriver.connect();
});
// Close the connection to the driver after the tests have completed
tearDownAll(() async {
if (driver != null) {
driver.close();
}
});
test('starts at 0', () async {
// Use the `driver.getText` method to verify the counter starts at 0.
expect(await driver.getText(counterTextFinder), "0");
});
test('increments the counter', () async {
// First, tap on the button
await driver.tap(buttonFinder);
// Then, verify the counter text has been incremented by 1
expect(await driver.getText(counterTextFinder), "1");
});
});
}
6.統合テストの実行
検出可能なアプリケーションとテストコンポーネントがあり、テストを実行できます.まず、AndroidシミュレータまたはiOSシミュレータが起動しているか、コンピュータを実際のiOS/Androidデバイスに接続しているかを確認します.
次に、プロジェクトのルートディレクトリで次のコマンドを実行します.flutter drive --target=test_driver/app.dart
このコマンドは、次のことをしました.
flutter drive --target=test_driver/app.dart
--target
によって指定されたアプリケーションを構築し、シミュレータまたはリアルデバイスにインストールする.test_driver/
フォルダの下にあるapp_test.dart
ファイルを実行します.