0

我正在对其进行单元测试的代码是这样的:

     if(((State !=TCPIP_IPADDR_STATE_ASSIGNED)&& (State !=TCPIP_IPADDR_STATE_ONHOLD) && (State !=TCPIP_IPADDR_STATE_UNASSIGNED)) ||(SoConId==DOIP_INVALID_16))
       {
        }

我的单元测试用例包括以下内容:

`DoIP_LocalIpAddrAssignmentChg(12,0xFF);`

其中 DoIP_LocalIpAddrAssignmentChg 是 if 所在的函数名称,0xFF 表示无效状态,显然不等于所有 3:TCPIP_IPADDR_STATE_ASSIGNEDTCPIP_IPADDR_STATE_ONHOLDTCPIP_IPADDR_STATE_UNASSIGNEDSoConId的值为12DOIP_INVALID_16 = 0xFF的值。

所以当我检查我的单元测试报告时,它给出了这个结果: 我的问题是为什么它没有覆盖TCPIP_IPADDR_STATE_UNASSIGNEDif 条件的代码覆盖率 的条件,因为我传递的状态值是0xFF,这是无效值。

4

1 回答 1

1

你是懒惰评估的“受害者”。

第 6.5.14 章“逻辑或运算符”:

如果第一个操作数比较不等于 0,则不计算第二个操作数。

多重与的所有三个部分都是true,因此不等于 0。

两个逻辑&&都被覆盖了,但你看不到它,因为||在同一行中没有完全执行。

于 2020-04-07T11:36:53.047 回答