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)的定义

一种变通方法是省略该测试。有没有更好的解决办法?

xUnit中的Assert.DoesNotThrowAsync()发生了什么?

我只是想用当前信息更新答案(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();
}