2

WinRTアプリケーション(メトロ)でnUnitを使用する方法がわかりません。このコードを記述してテストを実行します(Resharperテストランナーを使用)。テストに合格しました。なんで?

using System.Threading.Tasks;
using NUnit.Framework;
namespace UnitTestInWinRT
{
    [TestFixture]
    public class NUnitClassTest
    {
        [Test]
        public void TestnUnitAsyncTest()
        {
            var number = GetNumberAsync(7);
            number.ContinueWith(n => Assert.AreEqual("string is 6", n.Result));
        }
        public Task<string> GetNumberAsync(int n)
        {
            return Task.Run(() => "string is " + n);
        }
    }
}
4

1 に答える 1

7

問題は:

ContinueWithメソッドを使用します。

ターゲットタスクが完了すると非同期で実行される継続を停止します。

したがって、NUnitは他のスレッドでランバを実行し、テストメソッドを終了します。AssertionExcecption他のスレッドで発生するため、テストに合格します。

同じスレッドで実行した場合、テストは期待どおりに失敗します。

[TestFixture]
public class NUnitClassTest
{
    [Test]
    public void TestnUnitAsyncTest()
    {
        var number = GetNumberAsync(7);
        number.Wait();
        Assert.AreEqual("string is 6", number.Result);
    }

    public Task<string> GetNumberAsync(int n)
    {
        return Task.Run(() => "string is " + n);
    }
}
于 2012-10-11T10:26:02.230 に答える