我通过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)
解决方法是省略测试。有没有更好的解决方案?
答案 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);
}