提问人:thenry 提问时间:11/9/2023 更新时间:11/9/2023 访问量:25
使用 mockito 验证 NavigationService popUntil 调用
Verify NavigationService popUntil call using mockito
问:
我正在为我的 flutter 移动应用程序编写单元测试,我正在尝试测试一个函数,该函数在执行时应该弹出后退堆栈,直到满足路由函数的谓词。下面是测试代码和随附的导航代码的示例:
group('popUntilHomeView - ', () {
test(
'when popUntilHomeView is called the application should pop the stack until reaching the home screen',
() {
// Arrange
final navigationService = getAndRegisterNavigationServiceMock();
final viewModel = CurrentViewModel();
// Act
viewModel.popUntilHomeView();
// Assert
verify(navigationService.popUntil((route) => route.settings.name ==
'/home-view')).called(1);
});
});
下面是 NavigationService 中的代码,它基于 FilledStacked Architechure 构建。
void popUntil(RoutePredicate predicate, {int? id}) {
G.Get.until(predicate, id: id);
}
以下是运行上述测试的结果:
没有匹配的调用。所有调用:MockNavigationService.popUntil(Closure: (Route) => bool, {id: null})
(如果您致电,请改用 。verify(...).called(0);
verifyNever(...);
我正在使用 Mockito 来模拟导航服务,这是生成的模拟函数:
@override
void popUntil(
_i8.RoutePredicate? predicate, {
int? id,
}) =>
super.noSuchMethod(
Invocation.method(
#popUntil,
[predicate],
{#id: id},
),
returnValueForMissingStub: null,
);
正如你所看到的,该函数被调用了,它只是没有捕获我定义的谓词,而是返回一个 Closure。
问题
有没有人知道如何验证 NavigationService popUntil 是否使用正确的谓词调用?
笔记:
- 我尝试存根提供了一些成功的函数,但由于该函数被声明为无效,我无法对返回值做任何事情
- 我尝试将谓词声明为“any”,以尝试捕获调用详细信息,但由于谓词不可为空,因此不允许。
答: 暂无答案
评论