在VS2010中进行单元测试——“调试”通过,“运行”失败

6

我在Visual Studio 2010中进行单元测试时遇到了奇怪的问题。 当我使用“Debug test”(没有任何断点)时,测试通过,但在使用“Run test”时失败。 这个测试使用外部dll文件,所以我无法正确地调试它。

你知道为什么会出现这样的情况吗? 为什么“Debug test”和“Run test”不同,而其他参数都相同?


2
你的代码库中是否有任何仅在调试时执行的 CondtionalAttribute#if Debug 段落?在第三方库中,它们在调试模式和发布模式下可能会以不同的方式处理事情。 - Oded
除了Oded的问题,是否有任何特定的代码是需要时间控制的?任何可能需要延迟的代码部分在调试时可能会通过,但在正常流程中会失败。 - Ganesh R.
你有检查测试结果窗口并查看那里出现了什么错误吗? - Pritam Karmakar
1
一个无法让你诊断测试失败的单元测试并不是一个很好的测试。先解决这个问题,其他的就容易了。 - Hans Passant
3个回答

3

将您的解决方案从Debug模式切换到Release模式,进行完整的构建,然后切换回Debug模式并重试,让我知道结果,我认为测试将会通过....


2

有很多原因可以导致这种情况,但要确定其中一个原因,您需要提供一些可供我们处理的代码。

可能是代码被排除:

#ifdef _DEBUG
//do something
#endif

这段代码只会在调试模式下执行。

它可能是优化的结果。虽然通常不会影响行为,但您不应该依赖于析构函数或复制构造函数被调用。

如果您正在代码内部进行任何修改,那么这也可能只适用于调试。


1
我怀疑你正在访问超出边界的内存。调试和发布之间的一个主要区别在于,调试会添加填充和特殊标记的工具来捕获某些类型的错误。这意味着调试和发布版本之间的内存布局通常非常不同。我怀疑你正在以一种调试器没有捕获到的方式访问超出边界的内存,在调试版本中找到了一个意外有效的值,但在发布版本中找到了一个无效的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接