我们使用 AQTime 的覆盖率分析器来检查单元测试的覆盖率结果。它似乎通常可以正常工作,但有高估覆盖率的令人讨厌的习惯,因为某些功能根本没有出现。我认为这是因为链接器已经剥离了它们,因为它们没有被调用,但显然这并不理想,因为我希望它们显示为“未覆盖”。
有谁知道是否有办法配置 Visual C++ 或 AQTime,以便将这些功能正确标记为“未覆盖”?
我们使用 AQTime 的覆盖率分析器来检查单元测试的覆盖率结果。它似乎通常可以正常工作,但有高估覆盖率的令人讨厌的习惯,因为某些功能根本没有出现。我认为这是因为链接器已经剥离了它们,因为它们没有被调用,但显然这并不理想,因为我希望它们显示为“未覆盖”。
有谁知道是否有办法配置 Visual C++ 或 AQTime,以便将这些功能正确标记为“未覆盖”?
AQtime 从模块的调试信息中获取例程列表。由于链接器已经剥离了一些例程,因此没有它们的调试信息,AQtime 也没有“看到”它们。
通常,所有链接器都可以选择启用/禁用此功能。例如,在 Visual C++ 项目中,此选项名为References,位于Linker | 优化属性组。在应用程序的调试配置中删除此选项的值或将其设置为否 (/OPT:NOREF) ,链接器将不会删除未使用的函数。该选项在此处记录。
奇怪的。无论编译器/链接器是否剥离它们,事实是,在测试执行结束时,没有它们被执行的记录。所以如果该工具可以列出所有功能,它应该没有这样的证据,因此它应该报告“未执行”。
我们的SD C++ 测试覆盖工具没有这种奇怪的行为,至少如果您实际指定包含的编译单元或头文件是那些应该被检测的部分的一部分。(您可能无法列出包含函数体的头文件,然后不会被报告)。它甚至会报告已内联的函数已被执行,而不管它已内联的位置数。