1. ホーム
  2. c#

[解決済み] なぜ "async void "ユニットテストは認識されないのですか?

2023-05-11 07:53:04

質問

async void Visual Studio 2012でユニットテストを実行することができません。

[TestClass]
public class MyTestClass
{
    [TestMethod]
    public async void InvisibleMyTestMethod()
    {
        await Task.Delay(1000);
        Assert.IsTrue(true);
    }
}

非同期ユニットテストを行いたい場合、テストメソッドはTaskを返さなければなりません。

[TestMethod]
public async Task VisibleMyTestMethod()
{
    await Task.Delay(1000);
    Assert.IsTrue(true);
}

なぜそうなのでしょうか?絶対に必要というわけではなく async void のテストメソッドが絶対に必要というわけではなく、ちょっと気になっただけです。Visual Studio 2012では、ビルド時に async void をビルドしても警告もエラーも出ないのですが...。

どのように解決するのですか?

async void メソッドは、quot;Fire and Forget" と考えるべきです - それらの終了を待つ方法はありません。 Visual Studio がこれらのテストの 1 つを開始した場合、テストが完了するのを待ったり (成功としてマークしたり)、発生した例外をトラップしたりすることはできません。

を使用すると async Task を使うと、呼び出し側は実行が完了するのを待ち、実行中に発生した例外をトラップすることができます。

参照 この回答 の詳細については async voidasync Task .