我使用Mockito在Flutter上编写测试。我有一个模拟的类和方法,它们的参数均为函数-Function(),此方法返回StreamSubscription
。我需要将这些参数传递给listen()
函数的调用,但找不到解决方法。 (请参见示例)
有人可以帮我吗?
我尝试像示例中一样使用argThat(anyNamed('nameOfArgument')
传递它们,但是测试引发错误-在方法存根之外(通过when
使用“ anyNamed”参数匹配器)
class MockPhotoLibraryService extends Mock implements PhotoLibraryService {}
PhotoLibraryService setupMockPhotoLibraryService() {
final photoLibraryService = MockPhotoLibraryService();
when(
photoLibraryService.getPhotosForPeriod(
onData: anyNamed('onData'),
onDone: anyNamed('onDone'),
onError: anyNamed('onError')),
).thenAnswer((_) => Stream<Photo>.fromFuture(
Future<Photo>.delayed(Duration(milliseconds: 50), () => Photo()))
.listen(argThat(anyNamed('onData')), //need to pass argument named onData
onDone: argThat(anyNamed('onDone')), //need to pass argument named onDone
onError: argThat(anyNamed('onError')), //need to pass argument named onError
cancelOnError: true));
return photoLibraryService;
}
我需要这些参数函数由Future调用,以使我的可测试小部件正常工作。
答案 0 :(得分:0)
您可以通过Invocation
对象访问原始调用参数。它作为参数传递给thenAnswer
回调函数。
when(photoLibraryService.getPhotosForPeriod(
onData: anyNamed('onData'),
onDone: anyNamed('onDone'),
onError: anyNamed('onError'),
)).thenAnswer((Invocation invocation) {
final namedArgs = invocation.namedArguments;
final onData = namedArgs[Symbol('onData')] as Function(Photo);
final onDone = namedArgs[Symbol('onDone')] as Function();
final onError = namedArgs[Symbol('onError')] as Function(dynamic);
return Stream<Photo>.fromFuture(
Future<Photo>.delayed(Duration(milliseconds: 50), () => Photo()),
).listen(onData, onDone: onDone, onError: onError, cancelOnError: true);
});