問題の状況
テストのコード
- ユニットテスト
- テスト対象の依存をモック
- 複数のテストケースがある
- モックはテストケースで使い回す
- いずれもモックを呼び出している
- verifyでモックの呼び出しを確認する場合としない場合が混在
@GenerateMocks([Dependency])
void main() {
final mockDependency = MockDependency();
SomeUseCase init() => SomeUseCase(mockDependency);
group("SomeUseCaseのテスト", () {
setUp(() {
when(mockDependency.fetch()).thenReturn(0);
});
test("テストケース1", () {
// prepare
final target = init();
// test
target.call(); // invoke mockDependency.fetch()
// no verify of mockDependency
});
test("テストケース2", () {
// prepare
final target = init();
// test
target.call(); // invoke mockDependency.fetch()
// verify
verify(mockDependency.fetch()).called(1);
});
});
}
テスト結果
テストの実行順序によっては、verifyで確認するモックの呼び出し回数が想定より多い
Expected: <1>
Actual: <2>
Unexpected number of calls
解決
前に実行したテストケースでのモック呼び出しの記録が残ったままになっている!
1. 各テストケースでverifyする
test("テストケース1", () {
// prepare
final target = init();
// test
target.call(); // invoke mockDependency.fetch()
- // no verify of mockDependency
+ // verify
+ verify(mockDependency.fetch()).called(1);
});
2. モックをresetする
group("SomeUseCaseのテスト", () {
setUp(() {
+ reset(mockDependency);
when(mockDependency.fetch()).thenReturn(0);
});