【发布时间】:2010-01-18 15:28:14
【问题描述】:
一段时间以来,我们一直在使用 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 块没有任何作用,因为异常发生在委托代码中。
我希望有人能对此有所了解。
【问题讨论】:
-
您展示的测试示例不符合您展示的语法。另外,“当使用 NUnit ... 调试程序时”是什么意思?你的意思是你只是在运行测试,还是在调试器中运行测试(我知道 TestDriven.NET 可以做到这一点;不知道 NUnit 运行器)?
-
嗨,杰!对困惑感到抱歉。显示了两种不同类型的语法:新的和旧的。我们已经从旧语法切换到新语法,现在使用 Assert.Throws 约束。我们正在调试器中运行测试,到目前为止它运行良好,并且很容易看出出了什么问题,因为 VS 会直接跳转到导致异常的地方。使用新语法,我们将所有异常测试都视为“误报”,而使用旧语法,只有真正的异常会中断执行。
标签: c# visual-studio exception assert nunit-2.5