LCOV分支覆盖率报告中Branch 5未被执行提示含义咨询
LCOV分支覆盖率报告问题解答
「Branch X未被执行」的具体含义
LCOV的分支统计覆盖两类分支,「Branch X未被执行」指编号为X的分支在测试全流程中从未触发:
- 你在代码中显式编写的条件分支(if/else、switch、三目运算符等),每个判断会拆为「条件成立」「条件不成立」两个独立分支统计
- 编译器在编译阶段生成的隐式分支,包括函数调用、运算符重载、异常处理、标准库内部逻辑插入的跳转分支,同样会被纳入统计范围
本次提示的出现原因
你提供的LCOV报告片段如下:
83 : 84 : uint8_t a = 0; 84 [ + - ]: 84 : ret = check_uint(section, VALUE, &a); 85 [ + + ]: 84 : if (success != ret) { 86 [ + - ][ + - ]: 1 : std::cout << "a read from section. returned Error" << endl; 87 : 1 : return ret; 88 : : }
你理解的2个分支是第85行if (success != ret)的两个显式分支,对应报告里该行的[ + + ],这两个分支确实已经全部覆盖。
你收到的未覆盖提示来自第86行的隐式分支:该行的std::cout输出两次调用了C++的operator<<运算符重载,标准库的operator<<实现中自带流状态判断的错误处理分支,正常输出场景下这些错误处理分支永远不会被触发,LCOV会将这类隐式分支纳入统计,你看到的[ + - ]里的减号就是未被执行的标准库隐式分支,也就是提示里的Branch 5,不属于业务代码的逻辑遗漏。
内容的提问来源于stack exchange,提问作者krishna
相关产品推荐
相关产品推荐

