Насмешливый асин c щадящий вызов, чтобы бросить исключение, немедленно бросает во время установки - PullRequest
0 голосов
/ 21 апреля 2020

При написании модульного теста с использованием XUnit, Dapper, Moq.Dapper, Visual Studio 2019 и. NET core 3.0, я пытаюсь смоделировать вызов, который сгенерирует исключение, используя приведенный ниже код, который компилируется правильно, но тест не проходит на линии, в которой я устанавливаю вызов, за исключением того, что я настраиваю на выброс.

[Fact]
public void CanRetryFailedTimeoutOperation()
{
    var mockConnection = new Mock<IDbConnection>()
        .SetupDapperAsync(c => c.QueryAsync<string>(It.IsAny<string>(), null, null, null, null))
        .ThrowsAsync(new TimeoutException());
}

Почему он вызывает исключение во время настройки имитации вместо фактического вызова, который произойдет позже в тесте (здесь не показано)?

Неудачный результат теста:

System.AggregateException: One or more errors occurred. (The operation has timed out.)
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at Moq.Dapper.DbCommandSetup.<>c__DisplayClass0_0`2.<SetupCommandAsync>b__1(Func`1 r)
--- End of stack trace from previous location where exception was thrown ---
   at Moq.Extensions.InvokePreserveStack(Delegate del, Object[] args)
   at Moq.MethodCall.<>c__DisplayClass23_0.<SetCallbackResponse>b__1(Object[] args)
   at Moq.MethodCall.CallbackResponse.RespondTo(Invocation invocation)
   at Moq.MethodCall.Execute(Invocation invocation)
   at Moq.FindAndExecuteMatchingSetup.Handle(Invocation invocation, Mock mock)
   at Moq.Mock.Moq.IInterceptor.Intercept(Invocation invocation)
   at Moq.CastleProxyFactory.Interceptor.Intercept(IInvocation invocation)
   at Castle.DynamicProxy.AbstractInvocation.Proceed()
   at Castle.Proxies.ISetup`2Proxy.Returns(Func`1 valueFunction)
   at Moq.ReturnsExtensions.ThrowsAsync[TMock,TResult](IReturns`2 mock, Exception exception)
   at Tests.WhenUsingHdsRepository.CanRetryFailedTimeoutOperation() in Tests\WhenUsingHdsRepository.cs:line 57
System.TimeoutException: The operation has timed out.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...