为什么Visual Studio在调试单元测试时不会中断异常?

时间:2009-09-28 17:23:17

标签: visual-studio-2008 unit-testing debugging exception

当我尝试调试因代码中未处理的异常而失败的单元测试时,我希望Visual Studio能够打破未处理的异常,这样我就可以检查代码并找出问题所在。相反,IDE立即退出调试模式,测试列为“失败”,让我查阅测试结果的堆栈跟踪以找到问题。

我已经确认IDE被配置为在抛出任何用户未处理的CLR异常时中断。如果我配置IDE以中断所有抛出的异常,我只能得到预期的行为。当然,这可以正常调试PITA。

我运气不好吗?

8 个答案:

答案 0 :(得分:30)

原因是您的例外情况未得到处理。单元测试框架正在处理引擎下的异常并将它们转换为故障。

您需要做的是打破抛出的异常。如果将此与启用“Just My Code”(默认情况下为on)结合使用,您应该得到您期望的行为。只有在代码抛出异常时,Visual Studio才会中断。

答案 1 :(得分:9)

对我来说,我正在使用VS 2010和2015,转到:工具,选项,调试,常规:您需要确保选中“启用我的代码”和“启用例外助手”。

答案 2 :(得分:2)

单元测试框架处理异常,因此visual studio认为异常得到处理。

答案 3 :(得分:0)

默认情况下,即使您进行调试构建,MSTest也不会给您调试(带断点等),除非您实际告诉它明确“调试单元测试”。

它应该在单元测试中打破未处理的异常,只要你处于Debug配置,你使用“Debug”启动单元测试 - 即:使用Ctrl+R, Ctrl+A而不是{ {1}}运行所有测试。在测试窗口中,有一个“运行”和一个带有选项的“调试”菜单。

答案 4 :(得分:0)

这对我来说很有把握:
Ctrl + Alt + E表示例外菜单 - >按Reset All
转至:工具 - >选项 - >调试 - >一般:您需要确保选中“启用我的代码”和“启用例外助手”。

答案 5 :(得分:0)

我找到了在类似情况下适用于我的解决方案。

如果您注意到调试器的输出抛出了已处理的异常,则可以记录这些异常。

示例

enter image description here

接受刚才提到的内容,然后打开“例外设置” Exception Settings

或者您也可以按Ctrl + Alt + E

从那里您将看到许多可以使IDE中断的特定异常。

例如:ArgumentNullException

enter image description here

答案 6 :(得分:-1)

安装Testdriven.NET,然后使用“Test With - > Debugger”。

答案 7 :(得分:-1)

这是因为测试是使用MSTest运行的(Visual Studio仅用作shell)。 MSTest将掩盖这些被抛出的异常,它们永远不会冒泡到Visual Studio。如果在调试模式下运行测试,它应该可以工作。

如果右键单击“测试视图”中的测试并选择调试它们,它应该通过IDE运行代码,异常应该适当地中断。

alt text http://i36.tinypic.com/fwowaf.jpg