Visual Studio 2010:Nunit测试用例在调试模式下失败,但在运行模式下通过

时间:2014-01-31 12:38:40

标签: visual-studio-2010 debug-mode nunit-2.6.2

我在Visual Studio 2010 Ultimate中遇到了一个奇怪的问题: 我的一个Nunit(2.6.2)测试用例在调试模式下失败但是在运行模式下传递,好像我们有两个场景的完全不同的代码路径。

这是一个已知的错误吗?或者我缺少一些选项吗?

请赐教! 非常感谢。

编辑 - 更多信息 我的应用程序向组织内的一组人员写的dll提交了一些请求。 dll做了一些计算并将结果返回给我。

在探索dll行为的测试用例中(例如,提交具有特定参数的请求,检查dll的输出),运行Nunit测试工作正常,但调试测试用例会给我一个错误 - 从内部抛出一个异常DLL。

重要提示:运行/调试另一个测试用例可以获得一致的结果。

因此,对于奇怪的测试用例: 1,dll是好的,调试模式下的东西打破了dll 2,或者,dll有一个bug,由调试模式下的某些东西触发。

据我所知,在visual studio中运行和调试一段代码之间的唯一区别是,在调试时,加载了一个pdb文件,而在运行它时则没有。本质上,加载符号表以识别代码执行。

然后问题首先没有意义 - 为什么加载符号表会影响dll的行为? (要求任何人在没有看到任何代码的情况下给出解释是不公平的;但是,因为它是公司道具代码,我不能在这里展示。请,如果你在职业生涯中遇到过这样的事情,请与我分享在你的情况下发生了什么 - 让我希望我的问题有同样的原因,以便我实际上可以知道出了什么问题。谢谢)

3 个答案:

答案 0 :(得分:0)

您使用的是代码覆盖吗? 如果是这样,请尝试禁用它并运行。它可能会奏效。

有关详情,请查看:http://social.msdn.microsoft.com/Forums/en-US/aba3d58f-f19f-4742-b960-8ac2be29bb88/unit-test-passes-when-in-debug-but-fails-when-run

答案 1 :(得分:0)

您可能遇到过采用相同代码路径的情况,但由于优化,调试与非调试的结果略有不同。这里有几个不同的可能性:

  • 您的代码有一个微妙的错误,例如竞争条件
  • 您的测试过于具体,例如用于浮点比较,你应该使用公差

这是一个无法调试的痛苦,但我建议您在整个方法和测试中添加日志记录,以便您可以看到正在发生的事情。 (并希望记录本身不会改变测试结果,这也是可能的......)

答案 2 :(得分:0)

感谢您的回复。 我已经确定了原因:这是由于一个错误的参数驱动dll坚果。我的错。 它仍然没有回答为什么调试时的行为变得疯狂,但在运行测试用例时表现良好的问题。

但是,我猜,因为参数首先是错误的,所以我不能真的责怪dll的疯狂。无论如何,当我通过正确的参数时,一切都很顺利。

非常感谢你们。