whenFutureResult<T, E extends Object> function
PostExpectation<Future<Result<T, E> > >
whenFutureResult<T, E extends Object>(
- Future<
Result< invocation(), {T, E> > - Result? dummy,
A wrapper for Mockito's when that simplifies stubbing methods returning Future<Result>.
Since Mockito requires a dummy value for non-nullable return types during stubbing, this utility allows providing a
dummy value which is then registered via provideDummy for both Result<T, E> and Future<Result<T, E>>.
Example:
whenFutureResult(() => mock.getUser(), dummy: Ok(dummyUser))
.thenAnswer((_) async => Ok(actualUser));
Implementation
PostExpectation<Future<Result<T, E>>> whenFutureResult<T, E extends Object>(
Future<Result<T, E>> Function() invocation, {
Result<dynamic, dynamic>? dummy,
}) {
if (dummy != null) {
final typedDummy = _castDummy<T, E>(dummy, 'whenFutureResult');
provideDummy<Result<T, E>>(typedDummy);
provideDummy<Future<Result<T, E>>>(Future.value(typedDummy));
}
try {
return when(invocation());
} on MissingDummyValueError catch (e) {
throw Exception(
'whenFutureResult: MissingDummyValueError occurred while stubbing a Future<Result>-returning method.\n'
'This usually happens because the Result type needs dummy values registered with Mockito.\n\n'
'To fix this, provide a dummy value to whenFutureResult:\n'
" whenFutureResult(() => mock.method(), dummy: Ok('dummy_value'))\n\n"
'Original error: $e',
);
}
}