[英]What happened to Assert.DoesNotThrowAsync() in 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)
一種解決方法是省略測試。 有沒有更好的解決辦法?
我只是想用當前信息更新答案(2019 年 9 月)。
正如 Malcon Heck 提到的,使用 Record 類是首選。 查看xUnit 的 Github ,我看到當前檢查是否缺少拋出的異常的方法是這樣的
[Fact]
public async Task CanDeleteAllTempFiles() {
var exception = await Record.ExceptionAsync(() => DocumentService.DeleteAllTempDocuments());
Assert.Null(exception);
}
正如您在本次討論中看到的,測試一個方法是否在 xUnit v2 中不拋出的推薦方法是直接調用它。
在您的示例中,這將是:
[Fact]
public async Task CanDeleteAllTempFiles() {
await DocumentService.DeleteAllTempDocuments();
}
OP 正在詢問異步,但如果其他人來這里尋找非異步等效項,則:
[Fact]
public void TestConstructorDoesNotThrow()
{
var exception = Record.Exception(() => new MyClass());
Assert.Null(exception);
}
斷言異步代碼沒有拋出異常(在同步上下文中):
Exception exception = Record.ExceptionAsync(async () =>
{
// Some async code...
await System.Threading.Tasks.Task.Run(() => Console.WriteLine("Hello people"));
}).Result;
Assert.Null(exception);
斷言異步代碼沒有拋出異常(在異步上下文中):
Exception exception = await Record.ExceptionAsync(async () =>
{
// Some async code...
await System.Threading.Tasks.Task.Run(() => Console.WriteLine("Hello people"));
});
Assert.Null(exception);
不是(嚴格地)問題是關於什么的,但是......
斷言同步代碼沒有拋出異常(在異步或同步上下文中):
Exception exception = Record.Exception(() =>
{
// Some sync code...
System.Threading.Tasks.Task.Run(() => Console.WriteLine("Hello people"));
});
PS:我使用的是 XUnit 2.4.1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.