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

时间:2015-08-27 18:01:29

标签: xunit

我通过NuGet将我的单元测试项目从版本2.0.0-beta- {something}迁移到2.0.0(稳定版)。似乎Assert.DoesNotThrowAsync()不再可用了。

例如:

[Fact]
public void CanDeleteAllTempFiles() {
    Assert.DoesNotThrowAsync(async () => DocumentService.DeleteAllTempDocuments());
}

结果

  

DocumentServiceTests.cs(11,11):错误CS0117:'Xunit.Assert'不包含'DoesNotThrowAsync'的定义(CS0117)

解决方法是省略测试。有没有更好的解决方案?

4 个答案:

答案 0 :(得分:11)

正如您在this discussion中所看到的,测试方法是否不会引入xUnit v2的推荐方法是调用它。

在您的示例中,那将是:

[Fact]
public async Task CanDeleteAllTempFiles() {
    await DocumentService.DeleteAllTempDocuments();
}

答案 1 :(得分:4)

我只是想用当前信息更新答案(2019年9月)。

如Malcon Heck所述,最好使用Record类。 看着xUnit's Github,我发现当前检查是否缺少异常的方法是这样的

[Fact]
public async Task CanDeleteAllTempFiles() {
    var exception = await Record.ExceptionAsync(() => DocumentService.DeleteAllTempDocuments());
    Assert.Null(exception);
}

答案 2 :(得分:0)

你可以这样做:

[Fact]
public void CanDeleteAllTempFiles() {
    Assert.Null(
        await Assert.RecordExceptionAsync(
            async () => DocumentService.DeleteAllTempDocuments()
        )
    );
}

RecordException(Async)捕获变量中抛出的异常,然后您可以根据需要断言该变量。

答案 3 :(得分:0)

OP正在询问异步,但是如果其他任何人在这里寻找非异步等效项,则:

[Fact]
public void TestConstructorDoesNotThrow()
{
    var exception = Record.Exception(() => new MyClass());
    Assert.Null(exception);
}