Flutter-testing

提供:Dev Guides
移動先:案内検索

フラッター-テスト

テストは、アプリケーションの開発ライフサイクルにおける非常に重要なフェーズです。 アプリケーションが高品質であることを保証します。 テストには、慎重な計画と実行が必要です。 また、開発の最も時間のかかるフェーズです。

Dart言語とFlutterフレームワークは、アプリケーションの自動テストの広範なサポートを提供します。

テストの種類

一般に、アプリケーションを完全にテストするには、3種類のテストプロセスを使用できます。 彼らは次のとおりです-

単体テスト

単体テストは、アプリケーションをテストする最も簡単な方法です。 クラスのメソッドのコード(一般的には関数)の正確さを保証することに基づいています。 しかし、それは実際の環境を反映していないため、バグを見つけるための最小のオプションです。

ウィジェットのテスト

ウィジェットのテストは、ウィジェットの作成、レンダリング、および他のウィジェットとの対話が期待どおりであることを確認することに基づいています。 さらに一歩進んで、ほぼリアルタイムの環境を提供して、より多くのバグを見つけます。

統合テスト

統合テストには、データベース、Webサービスなどのアプリケーションの外部コンポーネントとともに、単体テストとウィジェットテストの両方が含まれます。実際の環境をシミュレートまたはモックして、ほぼすべてのバグを検出しますが、最も複雑なプロセスです。

Flutterは、あらゆる種類のテストをサポートします。 ウィジェットのテストを広範囲かつ排他的にサポートします。 この章では、ウィジェットのテストについて詳しく説明します。

ウィジェットのテスト

Flutterテストフレームワークは、ウィジェットをテストするtestWidgetsメソッドを提供します。 それは2つの引数を受け入れます-

  • テストの説明
  • テストコード
testWidgets('test description: find a widget', '<test code>');

関与するステップ

ウィジェットのテストには、3つの異なるステップが含まれます-

  • テスト環境でウィジェットをレンダリングします。
  • WidgetTesterは、Flutterテストフレームワークによって提供される、ウィジェットを構築してレンダリングするクラスです。 WidgetTesterクラスのpumpWidgetメソッドは、任意のウィジェットを受け入れ、テスト環境でレンダリングします。
testWidgets('finds a specific instance', (WidgetTester tester) async {
   await tester.pumpWidget(MaterialApp(
      home: Scaffold(
         body: Text('Hello'),
      ),
   ));
});

テストする必要があるウィジェットを見つけます。

Flutterフレームワークは、テスト環境でレンダリングされたウィジェットを見つけるための多くのオプションを提供し、それらは一般にファインダーと呼ばれます。 最も頻繁に使用されるファインダーは、find.text、find.byKey、find.byWidgetです。

  • find.textは、指定されたテキストを含むウィジェットを検索します。
find.text('Hello')
  • find.byKeyは、特定のキーでウィジェットを検索します。
find.byKey('home')
  • find.byWidgetは、インスタンス変数でウィジェットを見つけます。
find.byWidget(homeWidget)

ウィジェットが期待どおりに機能することを確認します。

Flutterフレームワークには、ウィジェットを期待されるウィジェットと一致させるための多くのオプションがあり、通常は_Matchers_と呼ばれます。 テストフレームワークが提供するexpectメソッドを使用してウィジェットを一致させることができます。これは、2番目のステップで、マッチャーのいずれかを選択することで、期待されるウィジェットと一致します。 重要なマッチャーの一部は次のとおりです。

  • findsOneWidget-単一のウィジェットが見つかったことを確認します。
expect(find.text('Hello'), findsOneWidget);
  • findsNothing-ウィジェットが見つからないことを確認します
expect(find.text('Hello World'), findsNothing);
  • findsWidgets-単一のウィジェットが見つかったことを確認します。
expect(find.text('Save'), findsWidgets);
  • findsNWidgets-N個のウィジェットが見つかったことを確認します。
expect(find.text('Save'), findsNWidgets(2));

完全なテストコードは次のとおりです-

testWidgets('finds hello widget', (WidgetTester tester) async {
   await tester.pumpWidget(MaterialApp(
      home: Scaffold(
         body: Text('Hello'),
      ),
   ));
   expect(find.text('Hello'), findsOneWidget);
});

ここでは、本文にTextウィジェットを使用して、テキストHelloを使用してMaterialAppウィジェットをレンダリングしました。 次に、find.textを使用してウィジェットを検索し、findsOneWidgetを使用して一致させました。

実施例

単純なフラッターアプリケーションを作成し、ウィジェットテストを作成して、関連する手順と概念をよりよく理解しましょう。

  • Androidスタジオで新しいflutterアプリケーションflutter_test_appを作成します。
  • テストフォルダーでwidget_test.dartを開きます。 以下に示すサンプルのテストコードがあります-
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
  //Build our app and trigger a frame.
   await tester.pumpWidget(MyApp());

  //Verify that our counter starts at 0.
   expect(find.text('0'), findsOneWidget);
   expect(find.text('1'), findsNothing);

  //Tap the '+' icon and trigger a frame.
   await tester.tap(find.byIcon(Icons.add));
   await tester.pump();

  //Verify that our counter has incremented.
   expect(find.text('0'), findsNothing);
   expect(find.text('1'), findsOneWidget);
});

ここでは、テストコードは次の機能を実行します-

  • tester.pumpWidgetを使用してMyAppウィジェットをレンダリングします。
  • findsOneWidgetおよびfindsNothingマッチャーを使用して、カウンターが最初にゼロになるようにします。
  • find.byIconメソッドを使用して、カウンターインクリメントボタンを検索します。
  • tester.tapメソッドを使用して、カウンターインクリメントボタンをタップします。
  • findsOneWidgetおよびfindsNothingマッチャーを使用して、カウンターが増加するようにします。

カウンターのインクリメントボタンをもう一度タップして、カウンターが2に増えたかどうかを確認します。

await tester.tap(find.byIcon(Icons.add));
await tester.pump();

expect(find.text('2'), findsOneWidget);
  • [実行]メニューをクリックします。
  • widget_test.dartオプションのテストをクリックします。 これにより、テストが実行され、結果ウィンドウに結果が報告されます。

フラッターテスト