簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM