如何通过带有`if / else if / else`的gcovr获得100%的分支覆盖率
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过带有`if / else if / else`的gcovr获得100%的分支覆盖率相关的知识,希望对你有一定的参考价值。
我是第一次使用gcovr,并且遇到了与此代码混淆的问题:
for (int i = 0; i < 4; i++)
bool a = i & 1;
bool b = i & 2;
if (a && b)
printf("a and b\n");
else if (a && !b)
printf("a not b\n");
else
printf("the other two\n");
(代码如您所愿,因此我不会粘贴输出。)
但是,gcovr决定我没有完整的分支机构覆盖:
✓✓ 5 for (int i = 0; i < 4; i++)
4 bool a = i & 1;
4 bool b = i & 2;
✓✓✓✓ 4 if (a && b)
1 printf("a and b\n");
✓✓✓✗ 3 else if (a && !b)
1 printf("a not b\n");
else
2 printf("the other two\n");
显然,四个排列中的一个不是由else if
处理,而是仅由第一个if
处理。
我很脾气,因为最终结果是分支覆盖率不到100%。这只是“方式”还是我致命的误解了?
答案
您可能想要重构:
if (a)
if (b)
std::cout << "a and b\n";
else
std::cout << "a and not b\n";
else
std::cout << "not a\n";
在您发布的代码中,a
在两个if
语句中进行评估。上面的示例删除了else if
条件。
以上是关于如何通过带有`if / else if / else`的gcovr获得100%的分支覆盖率的主要内容,如果未能解决你的问题,请参考以下文章
如何在角度 7 中使用带有 [ngClass] 的 if-else 条件? [复制]