mockito 如何创建扩展密封类的方法的Mock?

qv7cva1a  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(91)

我创建了一个密封类,如下所示,并创建了扩展方法。

sealed class Result<S, E extends Exception> {
  const Result();
}

final class Success<S, E extends Exception> extends Result<S, E> {
  const Success({required this.value});
  final S value;
}

final class Failure<S, E extends Exception> extends Result<S, E> {
  const Failure({required this.exception});
  final E exception;
}

extension ResultExtension on Result<dynamic, Exception> {
  dynamic unwrap() {
    if (this is Success) {
      return (this as Success).value;
    } else {
      throw (this as Failure).exception;
    }
  }
}

字符串
因此,我创建了以下使用此类的方法。

String execute() {
    try {
      final result = fetchText(); // return Result<String, Exception>
      return result.unwrap() as String;
    } on Exception catch (_) {
      rethrow;
    }
  }


我创建了这样的单元测试。

test('', () {
      // Arrange
      when(
        fetchText(),
      ).thenAnswer((_) => const Success(value: 'Success'));

      // Act
      final result = execute();

      // Assert
      expect(result, 'Success');
    });


并且,显示以下错误消息。

MissingDummyValueError: Result<String, Exception>
  
  This means Mockito was not smart enough to generate a dummy value of type
  'Result<String, Exception>'. Please consider using either 'provideDummy' or 'provideDummyBuilder'
  functions to give Mockito a proper dummy value.
  
  Please note that due to implementation details Mockito sometimes needs users
  to provide dummy values for some types, even if they plan to explicitly stub
  all the called methods.


我相信这是因为我还没有为unwrap()创建一个mock,但我不知道如何创建它。我如何为一个扩展密封类的方法创建一个mock?

ztmd8pv5

ztmd8pv51#

您需要手动提供它。将此添加到测试中。Mockito无法生成,但您可以手动添加一个虚拟示例:

provideDummy<Result<String, Exception>>(const Success("value"));

字符串

相关问题