我目前正在为 Qt
项目编写单元测试。我想通过 Cobertura 插件使用 Jenkins 中提供的统计数据(在 gcov
下用于获取统计数据)。
:~$ gcov -v
gcov 5.4.0 20160609
:~$ gcc -v
gcc version 5.4.0
然而,在我查看表格(见下文)后,我真的很惊讶地发现覆盖率很低,尤其是条件语句。对于第一个(请参阅文件覆盖率 segmentation )我认为我实际上已经完成了,因为代码只有三个 if
(每个都有一个条件)和我的测试涵盖所有(也通过调试进行检查以确保)。所以我真的很困惑这些数字的实际含义以及如何解释它们以使我的单元测试更好。
我什至开始认为一些糟糕的结果可能是由于使用了 Qt
,因为它不是完全纯 C++ 和所有“额外”(插槽、信号、MOC 文件等)。 ) 可能是 gcov
无法正确处理的内容。
最佳答案
检查带有显示的红色/绿色覆盖标记的注释源列表应该会有所帮助。
彩色条内的数字是行数,因此 47/108 表示由条件控制的 108 行代码中有 47 行代码具有覆盖率。
对于每个条件,您至少需要两个单元测试:每个分支一个。
如果有&&或||在条件 - 或其他任何地方(例如逻辑表达式),则必须执行每个组合以达到 100%。
也别忘了
a = (j == 0) ? c : d;
需要(至少)两次测试!
此外,如果使用 C++,请参阅 Why gcc 4.1 + gcov reports 100% branch coverage and newer (4.4, 4.6, 4.8) reports 50% for "p = new class;" line?
关于c++ - Jenkins Cobertura (with gcov) - 覆盖统计数据是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48504575/