一段时间以来,我们一直在使用 NUnit 和 VisualStudio 编写 C# .NET 代码。测试异常的风格是
旧语法:
[Test]
[ExpectException(typeof(ExceptionType))]
public void TestExceptionType()
{
}
现在 NUnit 已经发布了 2.5.2 版本,它引入了Assert.Throws( Type expectedExceptionType, TestDelegate code );
这使得异常测试更加灵活。我们的异常测试现在看起来像这样:
新语法:
[Test]
public void TestWithNullBufferArgument()
{
ArgumentNullException ex = Assert.Throws<ArgumentNullException>(() => _testInstance.TestFunction(null));
// now you can examine the exception and it's properties
Assert.AreEqual(ex.Message, "Argument was null");
}
我们的问题是,如果使用 Assert.Throws,当使用 NUnit(控制台或 GUI 运行程序)调试程序时,Visual Studio 会弹出一个窗口,显示未处理的异常。
为了澄清这一点:我们已将包含单元测试的 VS 项目设置为在调试时运行 nunit-x86.exe。(查看项目属性,调试选项卡,启动动作设置为运行nunit-x86.exe)
这会阻止 NUnit 继续测试。可以通过按 F5 继续调试/单元测试,但这不是一个可行的解决方案。
有没有办法避免这种情况?在 Assert.Throws 周围放置一个 try...catch 块没有任何作用,因为异常发生在委托代码中。
我希望有人可以对此有所了解。