我正在尝试在此方法上编写 Xunit 测试:
public async Task<IEnumerable<T>> RunSQLQueryAsync(string queryString)
{
try
{
//do something
}
catch (DocumentClientException e)
{
throw new InvalidOperationException(e);
}
}
这是单元测试:
[Fact]
public async virtual Task Test_Exception()
{
var queryString = "SELECT * FROM c";
var exception = Record.ExceptionAsync(async () => await classname.RunSQLQueryAsync(queryString));
Assert.NotNull(exception);
Assert.IsType<DocumentClientException>(exception);
}
但是这个方法失败了,它说:
Message: Assert.IsType() Failure Expected: System.DocumentClientException Actual:
System.Threading.Tasks.Task`1[[System.Exception, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxx]]
当我调试测试时,它没有进入 catch block 。所以我的问题是如何使单元测试期望方法 RunSQLQueryAsync
具有 DocumentClientException
?
最佳答案
测试不等待 Task<Exception>
从 Record.ExceptionAsync
返回所以下面的断言实际上是在 Task
上进行的本身。
被测方法也消耗了 DocumentClientException
并抛出 InvalidOperationException
的新异常所以这是应该预期的类型。
[Fact]
public async virtual Task Test_Exception() {
//Arrange
var queryString = "SELECT * FROM c";
//Act
var exception = await Record.ExceptionAsync(() =>
classname.RunSQLQueryAsync(queryString));
//Assert
Assert.NotNull(exception);
Assert.IsType<InvalidOperationException>(exception);
}
注意 Record.ExceptionAsync
之前的 await
还假设被测类已经设置了一个模拟依赖项,该依赖项将在 //do something
中抛出所需的异常。所提供片段的一部分。
关于c# - Xunit () 中的测试异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546452/