【问题标题】:Jenkins Cobertura (with gcov) - what do the coverage statistics mean?Jenkins Cobertura (with gcov) - 覆盖率统计是什么意思?
【发布时间】:2018-07-08 08:15:40
【问题描述】:

我目前正在为 Qt 项目编写单元测试。我想通过 Cobertura 插件使用 Jenkins 中提供的统计信息(下面的 gcov 用于获取统计信息)。

:~$ gcov -v
gcov 5.4.0 20160609

:~$ gcc -v
gcc version 5.4.0

然而,在我查看表格后(见下文),我真的很惊讶地发现覆盖率很差,尤其是条件句。对于第一个(请参阅文件覆盖率细分)我以为我已经完成了,因为代码只有三个ifs(每个都有一个条件)并且我的测试涵盖了所有内容(检查了这个也通过调试来确保)。所以我真的很困惑这些数字的实际含义以及如何解释它们以使我的单元测试更好。

我什至开始认为,一些糟糕的结果可能是由于使用了Qt,因为它不完全是纯 C++ 并且所有“附加”(插槽、信号、MOC 文件等)都可能是gcov 无法正常处理。

【问题讨论】:

  • 似乎由于在代码中创建分支的异常负责这种情况,here 可能是重复讨论。

标签: c++ testing jenkins gcov test-coverage


【解决方案1】:

检查带有显示的红色/绿色覆盖标记的带注释的源列表应该会有所帮助。

彩色条内的数字是行数,因此 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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2012-02-25
    • 2023-01-17
    • 2016-05-31
    • 2014-05-30
    相关资源
    最近更新 更多