Мокито с функциями в дартс
У меня есть метод, который я хотел бы высмеять, однако, когда я пытаюсь проверить вызовы этого метода. Я получаю сообщение об ошибке:
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 ответа
Решение
Я думаю, что у вас есть три проблемы здесь:
- Mockito работает только с классами, а не с функциями (см. https://github.com/dart-lang/mockito/issues/62). У вас есть несколько вариантов: создать тестовую реализацию функции или для
redux.dart
Вы можете реализоватьReducerClass
(который действует какReducer
функция путем реализацииcall
). - Вам нужно проверять вызываемые методы, а не весь класс Mock.
- Вы должны использовать
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);
}