如何在WinRT应用程序中使用nUnit测试?

时间:2012-10-03 17:09:33

标签: c# nunit winrt-async

我不知道如何在WinRT应用程序(metro)中使用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);
        }
    }
}

1 个答案:

答案 0 :(得分:7)

问题是:

您使用ContinueWith方法。

  

保留目标任务完成时异步执行的延续。

所以,NUnit在其他线程中运行你的lamba,并结束测试方法。 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);
    }
}