我有一个带有代码项目和'UnitTest'项目的VS2010解决方案。代码项目被编译为dll(并生成.lib)。 UnitTest项目编译为.exe。
在代码中,我有一个方法mymethod()
,应由一个单元测试覆盖。如果我将'UnitTest'设置为启动项目并运行,我可以看到确实调用mymethod()
:
在释放模式下使用断点进入,并在调试模式下禁用优化+
将printf添加到mymethod()
,printf称为
UnitTest正确编译为.exe,.lib和.dll是最新的。
当我从文件中启动.exe时,不调用printf(而代码中其他点的其他printf被调用)。如果我从命令行启动它,同样的事情。
当从.exe。
调用UnitTest时,确保在代码中采用了另一个路径应该检查哪些重要的事情?
这里可以发生什么?
修改
调查后:当使用可执行文件启动测试时,标志设置为0,因为转换为双重失败:我打印以下内容
printf("arr_size[0] %d, arr_size[1] %d, numOffElms %d
-- result multiplication REAL %d,
NOT REAL %d",arr_size[0], arr_size[1],numOffElms,
(real_T)(arr_size[0] * arr_size[1]), arr_size[0] * arr_size[1]);
其中REAL_T
是使用
double
的宏
typedef double real_T;
打印结果如下
arr_size[0] 90000, arr_size[1] 24, numOffElms 0 -- result multiplication REAL 0,
NOT REAL 2160000
!!!!
在VS2010中,在具有已禁用优化的调试或发布中,转换为双精度似乎是正确的。
这来自何处以及如何解决?
由于