Php,代码覆盖多个功能在一行时

时间:2014-08-16 14:05:56

标签: php phpunit

我觉得php中的代码覆盖率有时不是100%。让我们假设这一行:

if ($a == 1 && $b == 2)
{
    // something
}

调用thisMethod(1)时所有行都变为绿色,但$b == 2实际上未被检查过。它甚至可能是一个函数,在JUnit中,if行至少会变成黄色

1 个答案:

答案 0 :(得分:0)

这是&&的预期行为。如果条件的第一部分为假,则它甚至不执行第二部分。如果您想要检查这两个部分,请使用&。例如:

function increase_a() {
    global $a;
    $a++;
    return false;
}
function increase_b() {
    global $b;
    $b++;
    return false;
}
$a = 0;
$b = 0;
echo "Results for &&:<br />";
echo (increase_a() && increase_b()) ? "1" : "0";
echo "<br />";
echo $a . " " . $b . "<br />";
$a = 0;
$b = 0;
echo "Results for &:<br />";
echo (increase_a() & increase_b()) ? "1" : "0";
echo "<br />";
echo $a . " " . $b . "<br />";

输出:

Results for &&:
0
1 0
Results for &:
0
1 1

PHPFiddle链接:http://phpfiddle.org/main/code/bhdc-0ejf