14.2 CDash显示测试覆盖率
NOTE:此示例代码可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-14/recipe-02 中找到,其中包含一个C++示例。该示例在CMake 3.5版(或更高版本)中是有效的,并且已经在GNU/Linux、macOS和Windows上进行过测试。
本示例中,我们将测试覆盖率报告给CDash,面板上将能够逐行浏览测试覆盖率分析,以便识别未测试或未使用的代码。
准备工作
我们将扩展前一节的源代码,在src/sum_integers.cpp
中做一个小的修改,添加一个函数sum_integers_unused
:
我们使用gcov(https://gcc.gnu.org/onlinedocs/gcc/Gcov.html )通过覆盖率分析检测这个未使用的代码。
具体实施
通过以下步骤,我们将使用覆盖率分析,并将结果上传到面板:
主
CMakeLists.txt
和tests/CMakeLists.txt
文件与前一个示例相同。我们将扩展
src/CMakeLists.txt
,并提供一个选项来添加用于代码覆盖率的编译标志。此选项默认启用:然后,配置、构建,并将结果上传CDash:
最后一步,执行测试覆盖率分析:
最后,可以在浏览器中验证测试结果(本例的测试结果报告在 https://my.cdash.org/index.php?project=cmake-cookbook ):
工作原理
测试覆盖率为66.67%。为了得到更深入的了解,我们可以点击百分比,得到两个子目录的覆盖率分析:
通过浏览子目录链接,我们可以检查单个文件的测试覆盖率,甚至可以逐行浏览摘要(例如,src/sum_integs.cpp
):
运行测试时,绿线部分已经被覆盖,而红线部分则没有。通过这个方法,我们不仅可以标识未使用的/未测试的代码(使用sum_integers_used
函数),还可以查看每一行代码被遍历的频率。例如,代码行sum += i
已经被访问了1005次(在test_short
期间访问了5次,在test_long
期间访问了1000次)。测试覆盖率分析是自动化测试不可或缺的功能,CDash为我们提供了一个界面,可以在浏览器中图形化地浏览分析结果。
更多信息
为了更多的了解该特性,我们推荐读者阅读下面的博客文章,它更深入的讨论了CDash的覆盖特性:https://blog.kitware.com/additional-coverage-features-in-cdash/
Last updated