Flutter test
マッチャ等を提供するテスト用パッケージは2種類存在する
flutter_test package
test package
インストール
code:pubspec.yml
dev_dependencies:
flutter_test:
sdk: flutter
flutter pub get
基本的に <project root>/test/以下にファイルを配置し、ファイル名は<filename>_test.dartとする
Unit test サンプル
code:main_test.dart
import 'package:flutter_test/flutter_test.dart';
void main() {
group('group', () {
test('simple test', () {
expect(1 + 1, equals(2));
});
});
}
Widget test サンプル
code:main_test.dart
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('test A widget', (WidgetTester tester) async {
await tester.pumpWidget(A());
...
});
}
実行する
flutter test
ファイルを指定
flutter test <filepath>
テストケース名を指定
flutter test --name="<test case name>"
モック
基本的にモックデータの挿入はgroupではなくtestごとに定義する
Mockito package をつかうと classの挙動をモックできる callback のテスト
code:main.dart
class A {
void run({@required void Function() callback}) {
callback();
}
}
code:main_test.dart
import 'package:flutter_test/flutter_test.dart';
void main() {
test('run', () {
final a = A();
final completer = Completer<void>();
void callback => completer.complete;
a.run(callback: callback);
expect(completer.isCompleted, isTrue);
});
}
SharedPreferences.setMockInitialValues({})を使う
code:.circleci/config.yml
---
version: 2.0
jobs:
build:
working_directory: ~/repo
docker:
- image: cirrusci/flutter:v1.12.13-hotfix.8
steps:
- checkout
- run: flutter doctor
- restore_cache:
keys:
- dart-dependencies-{{ checksum pubspec.lock }}
- dart-dependencies-
- run:
name: Run flutter pub get
command: flutter pub get
- save_cache:
paths:
- .dart_tool
key: dart-dependencies-{{ checksum pubspec.lock }}
- run: flutter test
ref