如何在Gcovr上显示分支覆盖的真/假条件
我一直在试图获取我的执行测试用例执行的分支上的哪些条件。 例如,这是我从Gcov的gcov -b
获得的覆盖范围信息的剪辑(为了便于阅读,我也使用-i
选项):
lcount:10,1
branch:10,nottaken
branch:10,taken
在检查了一些样本之后,似乎总是首先在每个分支信息上写下真实情况。 这意味着我可以确定执行的测试用例是否采用分支的真实部分或虚假部分。 在这种情况下,测试用例将第10行的分支的虚假部分取走。
现在,这里是由Gcovr的生成XML剪断--branches
和--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
)显示分支机构覆盖范围。 要查看哪些分支未被覆盖,通常最容易看到条件分支中的哪些语句被发现。 但是,分支机构的覆盖范围栏也会显示小图标,指示采取了哪些分支。 每个分支有一个指标/每个条件有两个指标。 绿色✔表示覆盖分支,红色un表示未覆盖分支。
在上面的例子中,第一个分支被揭露。 未定义第一个分支是否对应于真或假条件。 如果有疑问,请将您的代码重写为仅使用语句级条件(no … ? … : …
, &&
, ||
运算符),以便所有分支都是单独的语句。 请注意,在C ++中,异常处理可能会引入其他可能难以/不可能覆盖的分支。
提示: - --branch
选项是不必要的分行覆盖。 它仅控制gcovr文本报告是显示分支还是线路覆盖。
上一篇: How to show True/False Condition on Branch Coverage on Gcovr