c++ - Jenkins Cobertura (with gcov) - 覆盖统计数据是什么意思?

标签 c++ testing jenkins gcov test-coverage

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

:~$ gcov -v
gcov 5.4.0 20160609

:~$ gcc -v
gcc version 5.4.0

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

enter image description here

我什至开始认为一些糟糕的结果可能是由于使用了 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/

相关文章:

c++ - 你怎么能确保一个 C++ 函数可以被调用为

javascript - 如何伪造 jquery.ajax() 响应?

java - 为 Java 代码定义测试数据 - 简单 - 也许使用 Scala?

maven - 如何取消部署与 Jenkins 的.war?

java - 如何使用java获取jenkins中正在进行的构建列表?

azure - Windows Azure 上的 Jenkins 从属连接问题

c++ - 逐行解析 CMemFile 中的文本

c++ - 让用户输入直到他们输入 X

c++ - 剥离项目的最佳 C++ 容器?

java - JMockit 问题(刚开始)