13

重複の可能性:
NUnit で非同期メソッドをテストし、最終的には別のフレームワークでテストするにはどうすればよいですか?

私が知りたいのは、C# 単体テストで、非同期メソッドが例外をスローすることをどのようにアサートできるかということです。Visual Studio 2012 で非同期単体テストを作成することはできますがMicrosoft.VisualStudio.TestTools.UnitTesting、例外をテストする方法がわかりません。xUnit.net もこの方法で非同期テスト メソッドをサポートしていることは知っていますが、そのフレームワークはまだ試していません。

私が言いたいことの例として、次のコードはテスト中のシステムを定義しています:

using System;
using System.Threading.Tasks;

public class AsyncClass
{
    public AsyncClass() { }

    public Task<int> GetIntAsync()
    {
        throw new NotImplementedException();
    }
}    

このコード スニペットは、 のテストTestGetIntAsyncを定義しAsyncClass.GetIntAsyncます。GetIntAsyncこれは、例外をスローするアサーションを達成する方法についての入力が必要な場所です。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading.Tasks;

[TestClass]
public class TestAsyncClass
{
    [TestMethod]
    public async Task TestGetIntAsync()
    {
        var obj = new AsyncClass();
        // How do I assert that an exception is thrown?
        var rslt = await obj.GetIntAsync();
    }
}

必要に応じて、Visual Studio 以外の関連するユニット テスト フレームワーク (xUnit.net など) を自由に使用してください。

4

4 に答える 4

11

マーク方法を試してください:

[ExpectedException(typeof(NotImplementedException))]
于 2012-09-03T13:21:44.040 に答える
10

最初のオプションは次のとおりです。

try
{
   await obj.GetIntAsync();
   Assert.Fail("No exception was thrown");
}
catch (NotImplementedException e)
{      
   Assert.Equal("Exception Message Text", e.Message);
}

2 番目のオプションは、予期される例外属性を使用することです。

[ExpectedException(typeof(NotImplementedException))]

3番目のオプションは、 Assert.Throws を使用することです:

Assert.Throws<NotImplementedException>(delegate { obj.GetIntAsync(); });
于 2012-09-03T13:22:21.980 に答える
2
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading.Tasks;

[TestClass]
public class TestAsyncClass
{
    [TestMethod]
    [ExpectedException(typeof(NotImplementedException))]
    public async Task TestGetIntAsync()
    {
        var obj = new AsyncClass();
        // How do I assert that an exception is thrown?
        var rslt = await obj.GetIntAsync();
    }
}
于 2012-09-03T13:23:52.697 に答える
0

TPL を使用してみてください:

[ExpectedException(typeof(NotImplementedException))]
[TestMethod]
public void TestGetInt()
{
    TaskFactory.FromAsync(client.BeginGetInt, client.EndGetInt, null, null)
               .ContinueWith(result =>
                   {
                       Assert.IsNotNull(result.Exception);
                   }
}
于 2012-09-03T13:26:34.583 に答える