Мокито с функциями в дартс

У меня есть метод, который я хотел бы высмеять, однако, когда я пытаюсь проверить вызовы этого метода. Я получаю сообщение об ошибке:

Used on a non-mockito object

Вот упрощенный код:

test('test',() {
  MockReducer reducer = new MockReducer();
  verify(reducer).called(0);
});

class MockReducer extends Mock {
  call(state, action) => state;
}

Почему я не могу сделать что-то подобное?

2 ответа

Решение

Я думаю, что у вас есть три проблемы здесь:

  1. Mockito работает только с классами, а не с функциями (см. https://github.com/dart-lang/mockito/issues/62). У вас есть несколько вариантов: создать тестовую реализацию функции или для redux.dartВы можете реализовать ReducerClass (который действует как Reducer функция путем реализации call).
  2. Вам нужно проверять вызываемые методы, а не весь класс Mock.
  3. Вы должны использовать verifyNever вместо verify(X).called(0),

Рабочий пример:

class MockReducer extends Mock implements ReducerClass {}

main() {
  test('should be able to mock a reducer', () {
    final reducer = new MockReducer();

    verifyNever(reducer.call(any, any));
  });
}

Если вы хотите просто создать фиктивную функцию для использования в качестве onTap в тестовой среде виджетов, с помощью mockito вы можете сделать что-то вроде этого:

      abstract class MyFunction {
  void call();
}

class MyFunctionMock extends Mock implements MyFunction {}

Контрольная работа:

      void main() {
 final mock = MyFunctionMock();
 ...

  // This is inside the the testWidgets callback 
  await tester.pumpWidget(
          widgetToBeTested(
            item: registeredListItem,
            onTap: mock,
          ),
        );

  //Logic to tap the widgetToBeTested

  verify(mock()).called(1);

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