2012-01-29 149 views
5

我在Visual Studio 2010中进行单元测试时遇到了一个奇怪的问题。 当我使用“调试测试”时没有任何断点),但在使用“运行测试”时失败。 此测试使用外部DLL,所以我无法正确调试它。VS2010中的单元测试 - “调试”通过,“运行”失败

你知道为什么会出现这种情况吗? 当所有其他参数相同时,为什么“调试测试”与“运行测试”不同?

+2

你有什么'你的代码库中的CondtionalAttribute'只执行调试吗?任何'#if调试'部分?在第三方库中,他们完全有可能在调试模式和发布模式下做不同的事情。 – Oded 2012-01-29 16:05:40

+0

添加到Oded的问题中,有没有特定的时间特定代码?当您正在调试时,可能需要延迟的任何代码部分都会通过,但在正常流程中会失败。 – 2012-01-29 16:08:34

+0

您是否检查过测试结果窗口并查看您到达的错误。 – 2012-01-29 17:31:23

回答

2

可能有几个原因,但要指出一个原因,您必须给我们一些代码才能使用。

这可能是代码排除:

#ifdef _DEBUG 
//do something 
#endif 

这将仅在调试模式下执行。

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

如果您在代码中进行任何黑客行为,它可能也只适用于调试。

1

我怀疑你正在访问内存越界。调试和释放之间的一个主要区别是,如果填充和特殊标记用于内存分配以捕获某些类型的错误,则调试会添加工具包。这意味着调试和发布版本之间的内存布局通常非常不同。我怀疑你是以调试器没有捕获的方式访问内存,在调试版本中发现一个意外的有效值,但在发布版本中发现一个无效的值。

3

切换你的解决方案发布模式,而不是调试,运行一个完整的建立,切换回调试和试,让我知道结果,我认为测试将通过....

+0

这解决了我的问题。谢谢! – gstar 2015-09-09 18:23:23

相关问题