合并后NUnit异步测试失败

时间:2016-06-20 14:54:28

标签: c# async-await nunit nunit-2.6

NUnit 2.6.4。

我有一个引入异步方法的VS / C#项目。它有许多这样的测试通过:

if (cordova) {
    // Running in your app
} else {
    // Not running in your app, so website
}

我已经将它合并到我们的主干中(没有冲突),现在这个测试失败了。我试图找出差异。

当我在主干中跟踪代码时,我看到两个异常抛出:

第一个是我期待的ArgumentNullException。 第二个是

    [Test]
    public async void NullProcThrows_Async()
    {
        var keyList = new KeyList<int>();
        Assert.Throws<ArgumentNullException>(async () => await keyList.LoadAsync((IDBProcedure)null, "ID", CancellationToken.None));
    }

当我在分支版本上运行测试时,我只看到一个例外并且测试通过。

两个项目之间可能有什么不同?

1 个答案:

答案 0 :(得分:1)

提供的代码似乎存在一些问题,请考虑以下因素:

[Test, ExpectedException(typeof(ArgumentNullException)]
public async Task NullProcThrows_Async()
{
    var keyList = new KeyList<int>();
    await keyList.LoadAsync((IDBProcedure)null, "ID", CancellationToken.None);
    Assert.Fail("This should never be executed as we expected the above to throw.");
}

根据NUnit文档,您应该使用ExpectedException属性而不是Assert.Throws。所以我添加了该属性,然后移除了Assert.Throws,而是添加了Assert.Fail。此外,我使方法Task返回,这阻止了async void。最后,这样做会阻止async lambda