При написании модульного теста с использованием 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.