0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Dart + Mockito】verifyでモック呼び出し回数が合わない

Posted at

問題の状況

テストのコード

  • ユニットテスト
  • テスト対象の依存をモック
  • 複数のテストケースがある
  • モックはテストケースで使い回す
    • いずれもモックを呼び出している
    • 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);
    });
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?