nunit 2.6.4。
我有一个VS/C#项目,该项目引入了异步方法。它有许多这样的测试通过:
[Test]
public async void NullProcThrows_Async()
{
var keyList = new KeyList<int>();
Assert.Throws<ArgumentNullException>(async () => await keyList.LoadAsync((IDBProcedure)null, "ID", CancellationToken.None));
}
我将其合并到我们的后备箱中(没有冲突),现在该测试失败了。我试图找出差异。
当我在后备箱中跟踪代码时,我看到了两个例外:
首先是我期望的参数努力。第二个是
NUnit.Framework.AssertionException saying Expected
<System.ArgumentNullException> But was: null
当我在分支版本上运行测试时,我只看到一个异常,并且测试通过。
两个项目之间会有什么不同?
提供的代码似乎有一些问题,请考虑以下内容:
[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
。