PHPUnit单支架线未被覆盖

时间:2016-07-27 12:59:39

标签: phpunit

任何人都可以告诉我为什么这一行在最后一次休息之后;保持未被覆盖,因此该方法的覆盖范围为0%!

private function isADateParameter($fieldName, $fieldValue){
    if(!is_array($fieldValue)){
        $this->addPayloadError('filter',320, $fieldName. 'is a date field and needs an array filter like {"gt":"2015-05-01"}');
        return false;
    }
    foreach ($fieldValue as $criteria => $date){
        $ar_date = explode('-', $date);
        switch(false){
            case in_array($criteria, ['gt', 'lt', 'gte', 'lte']):
                $this->addPayloadError('filter',321, $fieldName. ' supports only constraints gt, lt, gte or lte');
                break;
            case preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date):
                $this->addPayloadError('filter',322, $fieldName. ' supports only date in format YYYY-MM-DD');
                break;
            case checkdate($ar_date[1], $ar_date[2], $ar_date[0]):
                $this->addPayloadError('filter',323, $date. ' is not a real date');
                break;
        } //uncovered red line in html report
    }
    if(isset($this->payloadErrors['filter']) && count($this->payloadErrors['filter']) > 0){
        return false;
    }
    return true;
}

1 个答案:

答案 0 :(得分:1)

请参阅this bug report,特别是密切注释:

  

这不是错误。理论上,“$ value”可能不是1,2或3,在这种情况下,switch()将由于其中一个值而离开。 Xdebug不能对“doSomething()”返回的内容做出假设,无法知道所有返回的内容都不是1,2或3.每个函数和方法的最后一个包含一个隐式的“返回NULL”; - 哪个PHP看作可执行代码。因为有一个可能的代码路径没有命中},所以它被标记为“未执行”。

在你的情况下,你有三个案例陈述,我想你已经为它们编写了测试,但是你可能会或可能不会测试第三个暗示路径 - 如果这三个案例中没有一个匹配怎么办?

tl; dr:在交换机中添加default案例,并确保您的测试能够运用它。或者不要忽略该覆盖线。