chatGPT に立ててもらったスケジュールに準じてFlutterの状態管理を勉強。
- Day 10: Flutterアプリのテスト
- ユニットテストとウィジェットテストの基本を学ぶ
- シンプルなテストケースの作成と実行方法を学ぶ
種類
ウィジェットテスト (Widget Tests)
UIの個々のウィジェットが期待通りに動作するかを確認するテスト。
ウィジェットテストは比較的高速で、UIの特定の部分をテストするのに適している。
サンプルソース
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyWidget());
// Verify that our widget has a title and message.
expect(find.text('Title'), findsOneWidget);
expect(find.text('Hello World'), findsOneWidget);
});
}
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Title'),
),
body: Center(
child: Text('Hello World'),
),
),
);
}
}
統合テスト (Integration Tests)
アプリケーションの異なる部分が互いに適切に連携して動作するかを確認するテスト。
ウィジェットテストよりも広範囲で、より実際の使用状況に近いテストができる。
サンプルソース
void main() {
testWidgets('App should work end-to-end', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
// Interact with widgets and test app behavior.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
expect(find.text('New Item'), findsOneWidget);
});
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TodoListPage(),
);
}
}
ユニットテスト (Unit Tests)
個々の関数やメソッドが期待どおりに動作するかを確認できるテスト。
主にビジネスロジックやデータ処理のテストに使用される。
サンプルソース
void main() {
test('String should be reversed', () {
expect(reverseString('Hello'), 'olleH');
});
}
String reverseString(String str) {
return str.split('').reversed.join();
}
シンプルなテストケースの作成と実行方法
テストファイル
// test/my_test.dart
import 'package:flutter_test/flutter_test.dart';
void main() {
test('Addition test', () {
expect(add(2, 3), 5);
});
test('Subtraction test', () {
expect(subtract(5, 3), 2);
});
}
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
テストの実行
ターミナルで以下のコマンドを実行すると、テストを実行できる。
$ flutter test