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));
}
当我在分支版本上运行测试时,我只看到一个例外并且测试通过。
两个项目之间可能有什么不同?
答案 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
。