【问题标题】:Dart & Mockito. How to call Function() argument in mocked method飞镖和莫基托。如何在模拟方法中调用 Function() 参数
【发布时间】:2019-10-18 15:04:34
【问题描述】:

我使用 Mockito 在 Flutter 上编写测试。我有一个模拟类和方法,其参数是函数 - Function(),此方法返回 StreamSubscription。我需要将这些参数传递给listen() 函数的调用,但找不到方法。 (见示例) 有人可以帮帮我吗?

我尝试像示例中一样使用 argThat(anyNamed('nameOfArgument') 传递它们,但测试会引发错误 - “anyNamed”参数匹配器在方法存根之外使用(通过 when

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 调用这些参数函数,以使我的可测试小部件正常工作。

【问题讨论】:

    标签: dart mockito


    【解决方案1】:

    您可以通过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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      相关资源
      最近更新 更多