xUnit中的Assert.DoesNotThrowAsync()发生了什么?
本文关键字:发生了 什么 中的 Assert DoesNotThrowAsync xUnit | 更新日期: 2023-09-27 18:10:04
我通过NuGet将我的单元测试项目从2.0.0-beta-{什么}版本迁移到2.0.0(稳定)版本。似乎Assert.DoesNotThrowAsync()
不再可用了。
[Fact]
public void CanDeleteAllTempFiles() {
Assert.DoesNotThrowAsync(async () => DocumentService.DeleteAllTempDocuments());
}
在 搜索结果
DocumentServiceTests.cs(11,11):错误CS0117: 'Xunit. 'Assert'不包含'DoesNotThrowAsync' (CS0117)的定义
一种变通方法是省略该测试。有没有更好的解决办法?
我只是想用当前信息更新答案(2019年9月)。
正如Malcon Heck所提到的,首选使用Record类。查看xUnit的Github,我看到当前检查是否没有抛出异常的方法如下
[Fact]
public async Task CanDeleteAllTempFiles() {
var exception = await Record.ExceptionAsync(() => DocumentService.DeleteAllTempDocuments());
Assert.Null(exception);
}
OP正在询问异步,但如果其他人来这里寻找非异步等效则:
[Fact]
public void TestConstructorDoesNotThrow()
{
var exception = Record.Exception(() => new MyClass());
Assert.Null(exception);
}
在这个讨论中可以看到,测试一个方法是否在xUnit v2中抛出的推荐方法是直接调用它。
在您的示例中,它将是:
[Fact]
public async Task CanDeleteAllTempFiles() {
await DocumentService.DeleteAllTempDocuments();
}