我正在尝试对此方法编写 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);
}
但该方法失败了,它说:
消息:Assert.IsType() 失败预期:System.DocumentClientException 实际:
System.Threading.Tasks.Task`1[[System.Exception,
System.Private.CoreLib,版本=4.0.0.0,文化=中性,
公钥令牌=xxx]]
当我调试测试时,它不会进入 catch 块。所以我的问题是如何使单元测试期望该方法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);
}
注意前面的awaitRecord.ExceptionAsync
还假设被测类已设置了模拟依赖项,该依赖项将在//do something
所提供片段的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)