1. ホーム
  2. .net

NUnitで(あるいは他のフレームワークで)非同期メソッドをテストするにはどうしたらいいですか?

2023-09-01 18:01:15

質問

ASP.NET Web APIアプリケーションで、非同期メソッドを備えたApiControllerを使用して、次のようなものを返しています。 Task<> オブジェクトを返し async キーワードでマークされています。

public class MyApiController : ApiController
{
    public async Task<MyData> GetDataById(string id)
    {
        ...
    }
}

ApiControllerの非同期メソッドのNUnitテストはどのように書けばよいのでしょうか?もし他のテストフレームワークを使う必要があるのなら、それも歓迎します。私は一般的に.NETユニットテストにかなり新しいので、私はベストプラクティスを学ぶことに興味があります。

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

NUnit 2.6 には、タスクを返す非同期メソッドをテストするためのサポートが組み込まれていないようです。現在考えられる最良の選択肢は、Visual Studio 自体の UnitTesting フレームワークまたは xUnit.net を使用することです。 を使うことです。どちらも非同期テストをサポートしているので .

Visual StudioのUnitTestingフレームワークを使うと、このように非同期テストを書くことができます。

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class TestAsyncMethods
{
    [TestMethod]
    public async Task TestGetBinBuildById()
    {
         ...
         var rslt = await obj.GetAsync();
         Assert.AreEqual(rslt, expected);
    }
}