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