我通过NuGet将我的单元测试项目从版本2.0.0-beta- {something}迁移到2.0.0(稳定版).似乎Assert.DoesNotThrowAsync()不再可用了.
例如:
[Fact]
public void CanDeleteAllTempFiles() {
Assert.DoesNotThrowAsync(async () => DocumentService.DeleteAllTempDocuments());
}
Run Code Online (Sandbox Code Playgroud)
结果是
DocumentServiceTests.cs(11,11):错误CS0117:'Xunit.Assert'不包含'DoesNotThrowAsync'的定义(CS0117)
解决方法是省略测试.有没有更好的解决方案?
sla*_*sky 80
我只是想用当前信息更新答案(2019 年 9 月)。
正如 Malcon Heck 提到的,使用 Record 类是首选。查看xUnit 的 Github,我看到当前检查是否缺少抛出的异常的方法是这样的
[Fact]
public async Task CanDeleteAllTempFiles() {
var exception = await Record.ExceptionAsync(() => DocumentService.DeleteAllTempDocuments());
Assert.Null(exception);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ldi 20
正如您在本讨论中所看到的,测试方法是否不会引入xUnit v2的推荐方法是调用它.
在您的示例中,那将是:
[Fact]
public async Task CanDeleteAllTempFiles() {
await DocumentService.DeleteAllTempDocuments();
}
Run Code Online (Sandbox Code Playgroud)
OP 正在询问异步,但如果其他人来这里寻找非异步等效项,则:
[Fact]
public void TestConstructorDoesNotThrow()
{
var exception = Record.Exception(() => new MyClass());
Assert.Null(exception);
}
Run Code Online (Sandbox Code Playgroud)