gpt4 book ai didi

c# - 异常断言和在 VS 中调试 C# 项目

转载 作者:太空狗 更新时间:2023-10-29 18:30:31 24 4
gpt4 key购买 nike

我们使用 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。 (查看项目属性,调试选项卡,启动 Action 设置为运行nunit-x86.exe)

这会阻止 NUnit 继续测试。可以通过按 F5 继续调试/单元测试,但这不是一个可行的解决方案。

有什么办法可以避免这种情况吗?在 Assert.Throws 周围放置一个 try...catch block 不会执行任何操作,因为委托(delegate)代码中会发生异常。

我希望有人能对此有所启发。

最佳答案

问题本身的出现是因为很可能您打开了启用仅我的代码选项(工具->选项->调试->常规->启用仅我的代码)。

“启用此功能后,调试器仅显示并进入用户代码(“我的代码”),忽略系统代码和其他经过优化或没有调试符号的代码”(参见“General, Debugging, Options Dialog Box”)

通常你有一个 nunit.framework.dll 的发布版本,它没有相应的 nunit.framework.pdb 文件。

所以有两种选择:

  1. 禁用“仅我的代码”功能

  2. 下载 nunit 的源代码(来自 http://www.nunit.org/index.php?p=download ),在 Debug模式下构建它们,将所有 nunit.framework.*(dll、pdb、xml)放入解决方案中的 lib 或其他目录中,并引用该 nunit。 framework.dll 在你的测试项目中。

希望这对您有所帮助。

关于c# - 异常断言和在 VS 中调试 C# 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2087045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com