Jenkins Cobertura (with gcov) - 覆盖统计数据是什么意思?
Jenkins Cobertura (with gcov) - what do the coverage statistics mean?
我目前正在为 Qt
项目编写单元测试。我想通过 Cobertura 插件使用 Jenkins 中提供的统计数据(在 gcov
下方用于获取统计数据)。
:~$ gcov -v
gcov 5.4.0 20160609
:~$ gcc -v
gcc version 5.4.0
然而,在我查看 table(见下文)之后,我真的很惊讶地发现覆盖率很低,尤其是条件语句。对于第一个(请参阅 按文件 的覆盖率细分)我认为我实际上已经完成了,因为代码只有三个 if
(每个都有一个条件)和我的测试涵盖所有(也通过调试进行检查以确保)。所以我真的很困惑这些数字的实际含义以及如何解释它们以使我的单元测试更好。
我什至开始认为一些糟糕的结果可能是由于使用 Qt
造成的,因为它不完全是纯 C++ 和所有 "extras"(插槽、信号、MOC 文件等) .) 可能是 gcov
无法正确处理的东西。
检查带显示 red/green 覆盖率标记的注释源列表应该会有所帮助。
彩色条内的数字是行数,因此 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?
我目前正在为 Qt
项目编写单元测试。我想通过 Cobertura 插件使用 Jenkins 中提供的统计数据(在 gcov
下方用于获取统计数据)。
:~$ gcov -v
gcov 5.4.0 20160609
:~$ gcc -v
gcc version 5.4.0
然而,在我查看 table(见下文)之后,我真的很惊讶地发现覆盖率很低,尤其是条件语句。对于第一个(请参阅 按文件 的覆盖率细分)我认为我实际上已经完成了,因为代码只有三个 if
(每个都有一个条件)和我的测试涵盖所有(也通过调试进行检查以确保)。所以我真的很困惑这些数字的实际含义以及如何解释它们以使我的单元测试更好。
我什至开始认为一些糟糕的结果可能是由于使用 Qt
造成的,因为它不完全是纯 C++ 和所有 "extras"(插槽、信号、MOC 文件等) .) 可能是 gcov
无法正确处理的东西。
检查带显示 red/green 覆盖率标记的注释源列表应该会有所帮助。
彩色条内的数字是行数,因此 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?