Dart テスト
ソフトウェアテストは、アプリ開発の重要な一部であり、リリース前にアプリが正しく動作しているかを確認するのに役立ちます。この Dart テストガイドでは、いくつかのテストの種類を概説し、Flutter、Web、およびサーバーサイドのアプリやスクリプトのテスト方法を学習できる場所を案内します。
コマンドラインでは、dart test コマンド(Flutter アプリの場合は flutter test)を使用してテストを実行できます。
テストの種類
#Dart のテストドキュメントでは、おそらくすでに慣れ親しんでいるであろう多数のテストの種類の中から、単体テスト、コンポーネントテスト、エンドツーエンドテスト(統合テストの一種)の 3 種類に焦点を当てています。テストの用語は様々ですが、Dart テクノロジーを使用する際に遭遇する可能性のある用語と概念はこれらです。
単体テストは、関数、メソッド、クラスなど、テスト可能なソフトウェアの最小単位を検証することに焦点を当てます。テストスイートには、他の種類のテストよりも多くの単体テストを含めるべきです。
コンポーネントテスト(Flutter ではウィジェットテストと呼ばれます)は、コンポーネント(通常、複数のクラスで構成されます)が期待どおりに動作するかどうかを検証します。コンポーネントテストでは、ユーザーのアクション、イベントを模倣し、レイアウトを実行し、子コンポーネントをインスタンス化できるモックオブジェクトの使用が必要になることがよくあります。
統合テストおよびエンドツーエンドテストは、アプリ全体、またはアプリの大きな部分の動作を検証します。統合テストは一般的に、シミュレートされたデバイスまたは実際のデバイス、あるいはブラウザ(Web の場合)で実行され、アプリ自体と、アプリを徹底的にテストするテストアプリの 2 つの部分で構成されます。統合テストはパフォーマンスを測定することが多いため、テストアプリは一般的にテスト対象のアプリとは異なるデバイスまたは OS で実行されます。
一般的に役立つライブラリ
#テストは、コードが対象とするプラットフォーム(例: Flutter、Web、またはサーバーサイド)に部分的に依存しますが、以下のパッケージは Dart プラットフォーム全体で役立ちます。
package:test
Dart でテストを記述するための標準的な方法を提供します。test パッケージを使用して、以下を行うことができます。- 単一のテストまたはテストのグループを記述する。
@TestOnアノテーションを使用して、特定の環境で実行されるテストを制限する。- 同期テストと同じように非同期テストを記述する。
@Tagアノテーションを使用してテストにタグを付ける。たとえば、カスタム設定を作成したり、完了に時間がかかるテストを識別したりするためにタグを定義します。dart_test.yamlファイルを作成して、複数のファイルまたはパッケージ全体にわたってタグ付きテストを構成する。
package:mockito
固定シナリオでの使用のために簡単に設定できるモックオブジェクトを作成し、テスト対象システムがモックオブジェクトと期待どおりにやり取りしていることを検証する方法を提供します。package:test と package:mockito の両方を使用する例については、mockito パッケージの国際宇宙ステーション API ライブラリとその単体テストを参照してください。
Flutter テスト
#Flutter アプリのテストについてさらに学習するには、以下のリソースを使用してください。
- Flutter アプリのテスト
Flutter アプリで単体テスト、ウィジェットテスト、または統合テストを実行する方法。 - flutter_test
package:test を基盤とした Flutter 用のテストライブラリ。 - flutter_driver
実際のデバイスやエミュレータで Flutter アプリケーションをテストするためのテストライブラリ(別のプロセスで実行)。 - flutter_gallery
Flutter ギャラリーのサンプルコードとテスト。 - flutter/dev/manual_tests
Flutter SDK 内の多くのテスト例。
その他のツールとリソース
#Dart アプリケーションの開発とデバッグにも、以下のリソースが役立つ場合があります。
IDE
#デバッグに関しては、最初の防御線は IDE です。Dart プラグインは、多くの一般的に使用されている IDE で利用可能です。
Dart DevTools
#Dart DevTools は、Dart および Flutter 用のパフォーマンスツールスイートです。詳細については、Dart DevTools ドキュメントを参照してください。
継続的インテグレーション
#コミットごとにプロジェクトをビルドし、テストを実行するために継続的インテグレーション(CI)の使用を検討してください。GitHub の 2 つの CI サービスは、GitHub Actions とAppVeyor です。
GitHub Actions についてさらに学習する
- Dart チームによって提供される多くのパッケージは GitHub Actions を使用しています。例については、markdown パッケージのリポジトリにある
markdown.yamlを参照してください。そのリポジトリが Travis CI から GitHub Actions に移行した方法を確認するには、PR #353 を参照してください。