本記事では、Flutter のユニットテストにおいて、Mock を使う方法について紹介します。
基本的なユニットテスト方法については、以下の記事をご参照ください。
Mock とは?
Mock
とは、特定のクラスやコンポーネントの擬似オブジェクトで、テストの際にそのクラスやコンポーネントの振る舞いをシミュレートします。実際のデータや実環境を使わずに、特定の状況や振る舞いを作り出すことができます。
例えば、APIを呼び出してデータを取得する部分をテストする場合、実際に外部APIにアクセスすると遅延やエラーのリスクが伴います。これを避けるために、APIをモックし、固定のデータを返すようにすることで、APIに依存しないテストが可能になります。
Mock の使用方法
パッケージのインストール
まずは、mockito と build_runner のパッケージをインストールしましょう。
mockito は、Mock オブジェクトを生成するためのパッケージです。
build_runner は、Mockito のコード生成を自動化するためのパッケージです。
Mock 対象クラスの作成
次に、Mock 対象となるクラスを用意しましょう。
今回は、以下のような外部 API を使用してデータを取得する ApiClient というクラスを用意しました。
class ApiClient {
Future<String> fetchData() async {
// 外部APIにリクエストを送る処理
return 'Real Data';
}
}
Mock クラスの生成
Mock 対象のクラスを用意できたら、Mock クラスを生成します。
テストファイルとして api_client_test.dart を作成し、コードを以下のように記述します。
@GenerateMocks アノテーションを使用することで、ApiClient の Mock クラスである MockApiClient クラスを生成できます。
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'api_client.dart'; // Mock対象のクラスをインポート
// Mockクラスを生成するためのアノテーション
@GenerateMocks([ApiClient])
void main() {
// テストケースは後で記述します
}
上記のようにテストファイルを作成できたら、以下のコマンドを実行して Mock クラスを生成します。
flutter pub run build_runner build
このコマンドの実行結果として、api_client_test.mocks.dart が自動生成されて、そこに MockApiClient というクラスが作成されます。
テストコードの作成
Mock クラスを生成できたら、テストコードを作成します。
今回は、以下のようなテストを書いてみました。
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:sample/api_client.dart'; // Mock対象のクラスをインポート
import 'api_client_test.mocks.dart'; // 自動生成されたMockクラス
// Mockクラスを生成するためのアノテーション
@GenerateMocks([ApiClient])
void main() {
late MockApiClient mockApiClient;
setUp(() {
mockApiClient = MockApiClient(); // Mockのインスタンスを作成
});
test('fetchData returns mock data', () async {
// MockされたfetchDataメソッドの動作を定義
when(mockApiClient.fetchData()).thenAnswer((_) async => 'Mock Data');
// fetchDataメソッドを実行し、Mockの結果を確認
expect(await mockApiClient.fetchData(), 'Mock Data');
// 呼び出されたかを検証
verify(mockApiClient.fetchData()).called(1);
});
}
上記のテストコード例では、when で Mock メソッドの fetchData() が呼ばれた時に返す値を設定しています。
また、verify で fetchData() の呼び出し回数が正しいかどうかも検証しています。
まとめ
今回は、Flutter で Mock を使ったユニットテストの方法について紹介しました!
- Flutter で Mock を使用するには、mockito パッケージと build_runner パッケージをインストールする
- @GenerateMocks アノテーションとコマンド実行で Mock クラスを作成する
- when で Mock メソッドが呼ばれた時の動作を設定する
以上で、【Flutter】ユニットテストでの Mock の使い方 は終わりです。
コメント