whenResult<T, E extends Object> function

PostExpectation<Result<T, E>> whenResult<T, E extends Object>(
  1. Result<T, E> invocation(), {
  2. Result? dummy,
})

A wrapper for Mockito's when that simplifies stubbing methods returning 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 Result<T, E>.

Example:

whenResult(() => mock.getUser(), dummy: Ok(dummyUser)).thenReturn(Ok(actualUser));

Implementation

PostExpectation<Result<T, E>> whenResult<T, E extends Object>(
  Result<T, E> Function() invocation, {
  Result<dynamic, dynamic>? dummy,
}) {
  if (dummy != null) {
    provideDummy<Result<T, E>>(_castDummy<T, E>(dummy, 'whenResult'));
  }

  try {
    return when(invocation());
  } on MissingDummyValueError catch (e) {
    throw Exception(
      'whenResult: MissingDummyValueError occurred while stubbing a Result-returning method.\n'
      'This usually happens because the Result type needs a dummy value registered with Mockito.\n\n'
      'To fix this, provide a dummy value to whenResult:\n'
      "  whenResult(() => mock.method(), dummy: Ok('dummy_value'))\n\n"
      'Original error: $e',
    );
  }
}