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 在其他线程中运行您的 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);
    }
}
于 2012-10-11T10:26:02.230 回答