我正在使用完全异步等待方法查询第三方 SDK,并且 SDKAggregateException
在正常情况下返回一个。在AggregateException
内部异常中将是一种ABCException
.
但是,在使用 Moq 和 XUnit 在单元测试用例中模拟相同的代码时,它会ABCException
直接返回。
这是 catch 块的代码部分:
public async Task<Response> ExecuteAsync(IFunction function)
{
try
{
return await InvockAsync(function, location);
}
catch (AggregateException ex)
{
ex.Handle(e =>
{
if (e is ABCException)
{
DoSomething();
}
}
}
catch (ABCException ex)
{
DoSomething();
}
}
这是单元测试用例的代码块:
public async Task UnitTest()
{
// Arrange
var mockService = new Mock<IService>();
mockService.Setup(x => x.InvockAsync(It.IsAny<IFunction>())).ReturnsAsync(new Response());
var instance = new OtherService(mockService.Object);
Func<Task> func = async () => await instance.ExecuteAsync(data);
//Act
var data = await Assert.ThrowsAsync<AggregateException>(func);
//Assert
Assert.IsType<AggregateException>(data);
}
在上面的代码中,一个正常的调用进来了AggregateException
,单元测试用例调用进来了ABCException
。