0

我在使用 Visual Studio 2010 Ultimate 时遇到了一个奇怪的问题:我的一个 Nunit(2.6.2) 测试用例在调试模式下失败但在运行模式下通过,就好像我们在这两种情况下的代码路径完全不同。

这是一个已知的错误?还是在我缺少的 vs 中有一些选项?

请赐教!非常感谢。

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

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

重要提示:运行/调试另一个测试用例会给我一致的结果。

所以,对于奇怪的测试案例: 1,要么dll是好的,调试模式下的东西破坏了dll 2,或者,dll有一个bug,这是由调试模式下的东西触发的。

据我所知,在 Visual Studio 中运行和调试一段代码的唯一区别在于,在调试时,会加载一个 pdb 文件,而在运行时却没有。本质上,加载一个符号表来识别代码执行。

那么这个问题首先没有意义 - 为什么加载符号表会影响 dll 的行为?(不看代码就要求任何人解释是不公平的;但是,由于是公司的prop.代码,我不能在这里展示。请,如果您在职业生涯中遇到过这样的事情,请与我分享你的情况发生了什么——希望我的问题有同样的原因,这样我才能真正知道出了什么问题。谢谢)

4

3 回答 3

0

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

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

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

于 2014-01-31T12:45:46.993 回答
0

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

但是,我想,由于参数首先是错误的,我不能真正责怪 dll 发疯。无论如何,当我传入正确的参数时,一切顺利。

非常感谢你们。

于 2014-02-05T10:29:36.060 回答
0

你在使用代码覆盖率吗?如果是这样,请尝试禁用它并运行。它可能会起作用。

有关更多详细信息,请查看:http ://social.msdn.microsoft.com/Forums/en-US/aba3d58f-f19f-4742-b960-8ac2be29bb88/unit-test-passes-when-in-debug-but-fails-运行时

于 2014-01-31T12:44:14.610 回答