web-dev-qa-db-ja.com

xUnitのAssert.DoesNotThrowAsync()はどうなりましたか?

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)

回避策はテストを省略することです。より良い解決策はありますか?

16
der_michael

このディスカッション でわかるように、メソッドがxUnit v2でスローされないかどうかをテストするための推奨される方法は、単に呼び出すことです。

あなたの例では、それは次のようになります。

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

回答を現在の情報で更新したかっただけです(2019年9月)。

Malcon Heckが述べたように、Recordクラスを使用することをお勧めします。 xUnitのGithub を見ると、スローされた例外がないかどうかを確認する現在の方法は次のようになっています。

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

あなたはこれを行うことができます:

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

RecordException(Async)は、変数にスローされた例外をキャプチャします。この例外は、必要に応じてアサートできます。

0
Chris Tavares