如何在 Gcovr 上显示 True/False 分支覆盖条件

How to show True/False Condition on Branch Coverage on Gcovr

我一直在尝试获取我执行的测试用例在分支上的哪个条件。 例如,这是我从 Gcov 的 gcov -b 获得的覆盖率信息的片段(为了便于阅读,我还使用了 -i 选项):

lcount:10,1
branch:10,nottaken 
branch:10,taken    

查看一些样本后,似乎每个分支信息总是先写真实条件。这意味着我可以确定执行的测试用例是否采用分支的真实部分或错误部分。而在本例中,测试用例在第 10 行取了分支的 false 部分。

现在,这是来自 Gcovr 的 --branches--xml 生成的 xml 的相同程序和测试用例的片段:

<line branch="true" condition-coverage="50% (1/2)" hits="1" number="10">
   <conditions>
      <condition coverage="50%" number="0" type="jump"/>
   </conditions>
</line>

到这里,分不清哪部分的树枝被拿走了

Gcovr 上有我可以使用的选项吗?

gcovr XML 输出使用多种其他工具可以理解的 Cobertura XML 格式。这意味着 gcovr 仅限于 XML 模式,不能包含额外信息。

Gcovr 的 HTML 报告 (--html-details) 显示分支覆盖率。要查看哪些分支未被覆盖,通常最容易查看条件分支中的哪些语句未被覆盖。但是,分支覆盖率列还会显示小图标,指示采用了哪些分支。每个分支有一个指标/每个条件有两个。绿色 ✔ 表示覆盖的分支,红色 ✘ 表示未覆盖的分支。

在上面的例子中,第一个分支是未覆盖的。第一个分支对应的是真还是假条件未定义。如果有疑问,请重写您的代码以仅使用 statement-level 条件(没有 … ? … : …&&|| 运算符),以便所有分支都是单独的语句。请注意,在 C++ 中,异常处理可以引入额外的分支,这些分支可能 difficult/impossible 覆盖。

提示:--branch 选项对于获取分支覆盖是不必要的。它只控制 gcovr 文本报告是否显示分支或线路覆盖。