我有一个小部件,它带有一个回调,当按下按钮时会调用该回调。我正在尝试测试按钮是否正确调用了回调。
我尝试嘲笑Function
类:
class MockCallback extends Mock implements Function {
call() {}
}
然后将模拟类的实例传递给我的小部件并模拟水龙头:
final mocked = MockCallback();
await tester.pumpWidget(
MyWidget(myCallback: mocked),
);
final clearButtonFinder = find.byType(IconButton);
await tester.tap(clearButtonFinder);
verify(mocked()).called(1);
这会导致verify
调用出现错误,提示Used on a non-mockito object
。如果我在模拟的call
中放入打印语句,则可以看到水龙头确实在调用它。
如何验证点击按钮时传递给我的小部件的回调是否被调用一次?
答案 0 :(得分:2)
我就是这样解决这个问题的。
class MockCallback {
int _callCounter = 0;
void call() {
_callCounter += 1;
}
bool called(int expected) => _callCounter == expected;
void reset() {
_callCounter = 0;
}
}
不需要mockito。
答案 1 :(得分:0)
可能不是最佳解决方案-使用流:
final callbackCalled = BehaviorSubject<void>.seeded(null);
await tester.pumpWidget(
MyWidget(myCallback: () { callbackCalled.add(null); }),
);
//... actions to trigger the callback
await expectLater(callbackCalled, emitsInOrder(<void>[null, null]));
您可以使用有意义的内容代替“ void”和“ null”。