.net core 模拟异步dapper调用以在安装过程中立即引发异常

.net core 模拟异步dapper调用以在安装过程中立即引发异常,.net-core,async-await,moq,xunit,.net Core,Async Await,Moq,Xunit,当使用XUnit、Dapper、Moq.Dapper、Visual Studio 2019和.NET core 3.0编写单元测试时,我试图模拟一个调用,该调用将使用下面正确编译的代码引发异常,但测试在我设置调用的线路上失败,我配置了要引发的异常 [Fact] public void CanRetryFailedTimeoutOperation() { var mockConnection = new Mock<IDbConnection>() .SetupD

当使用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());
}
[事实]
public void CanRetryFailedTimeoutOperation()
{
var mockConnection=new Mock()
.SetupDapperAsync(c=>c.QueryAsync(It.IsAny(),null,null,null,null))
.ThrowsAsync(新的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.
System.AggregateException:发生了一个或多个错误。(操作已超时。)
位于System.Threading.Tasks.Task.ThrowifeException(布尔值IncludeTaskCanceledException)
位于System.Threading.Tasks.Task`1.GetResultCore(布尔waitCompletionNotification)
在System.Threading.Tasks.Task`1.get_Result()中
在Moq.Dapper.DbCommandSetup.c__显示类0_0`2.b__1(Func`1r)
---来自引发异常的上一个位置的堆栈结束跟踪---
在Moq.Extensions.InvokePreserveStack(委托del,对象[]args)
在Moq.MethodCall.c__显示类23_0.b__1(对象[]参数)
在Moq.MethodCall.CallbackResponse.RespondTo(调用调用)
在Moq.MethodCall.Execute(调用调用)
在Moq.FindAndExecuteMatchingSetup.Handle(调用调用,模拟)
在Moq.Mock.Moq.IInterceptor.Intercept(调用)处
在Moq.CastleProxyFactory.Interceptor.Intercept(IInvocation调用)
在Castle.DynamicProxy.AbstractInvocation.procedure()中
at Castle.Proxies.ISetup`2Proxy.Returns(Func`1 valueFunction)
在Moq.ReturnsExtensions.ThrowsAsync[TMock,TResult](IReturns`2 mock,Exception)
在Tests\whenusingdsrepository.cs中的Tests.whenusingdsrepository.CanRetryFailedTimeoutOperation()处:第57行
System.TimeoutException:操作已超时。