😽
Flutter / mockito
資料
-
公式
-
非公式
開発者・コミュニティ・歴史
- dart.devが開発
モチベーション
- unit testをするためにモックが必要
- モックを自分で実装するのは面倒なので、自動生成したい
使い方
基本
flutter pub add mockito
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
// Annotation which generates the cat.mocks.dart library and the MockCat class.
([MockSpec<Cat>()])
import 'cat.mocks.dart';
// Real class
class Cat {
String sound() => "Meow";
bool eatFood(String food, {bool? hungry}) => true;
Future<void> chew() async => print("Chewing...");
int walk(List<String> places) => 7;
void sleep() {}
void hunt(String place, String prey) {}
int lives = 9;
}
void main() {
// Create mock object.
var cat = MockCat();
}
flutter pub run build_runner build
# OR
dart run build_runner build
メソッドの実行確認: verify関数
// Interact with the mock object.
cat.sound();
// Verify the interaction.
verify(cat.sound());
Stubもできる
stubにしたメソッドは、stubで指定した値を何度でも返す。
// Stub a mock method before interacting.
when(cat.sound()).thenReturn("Purr");
expect(cat.sound(), "Purr");
// You can call it again.
expect(cat.sound(), "Purr");
// Let's change the stub.
when(cat.sound()).thenReturn("Meow");
expect(cat.sound(), "Meow");
// You can stub getters.
when(cat.lives).thenReturn(9);
expect(cat.lives, 9);
// You can stub a method to throw.
when(cat.lives).thenThrow(RangeError('Boo'));
expect(() => cat.lives, throwsRangeError);
// We can calculate a response at call time.
var responses = ["Purr", "Meow"];
when(cat.sound()).thenAnswer((_) => responses.removeAt(0));
expect(cat.sound(), "Purr");
expect(cat.sound(), "Meow");
stubとは
テスト対象に都合の良いデータを出力してくれる
受信メッセージのテスト
mockとは
テスト対象からの出力を受けてくれる
送信メッセージのテスト
Discussion