Почему я получаю «MissingStubError», даже если функция заглушена?

У меня есть эта функция:

      Future<void> run(
  void Function() onStart,
  void Function() newCallback,
  void Function() updateCallback,
  void Function() onFinish,
) {
  return Future(() async {
    // heavy work
  });
}

Я пытаюсь издеваться над этим:

      when(() => module.run(
          () {},
          () {},
          () {},
          () {},
        )).thenAnswer(
      (invocation) => Future(() {}),
    );

Тест флаттера возвращает:

        MissingStubError: 'run'
  No stub was found which matches the arguments of this method call:
  run(Closure: () => void, Closure: () => void, Closure: () => void, Closure: () => void)
  
  Add a stub for this method using Mocktail's 'when' API.
  package:mocktail/src/mocktail.dart 30:5            _exceptionResponse.<fn>
  package:mocktail/src/mocktail.dart 131:37          Mock.noSuchMethod
  package:app/module.dart 94:16                      MockApiBindings.scan
  package:app/model.dart 165:20                      Model.startWork
  test/model_test.dart 168:9                         main.<fn>
  ===== asynchronous gap ===========================
  dart:async                                         _completeOnAsyncError
  test/model_test.dart 168:9                         main.<fn>

Почему это не работает? Разве все пустые замыкания не возвращают void?

1 ответ

Да...

      when(() => module.run(
          any(),
          any(),
          any(),
          any(),
        )).thenAnswer(
      (invocation) => Future(() {}),
    );

Это было неожиданно, но логично...

Если кто-нибудь найдет другое решение, пожалуйста, дайте мне знать (:

Другие вопросы по тегам