PHPUnit单支架线未覆盖

PHPUnit单支架线未覆盖,phpunit,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":"2

谁能告诉我为什么这一行在最后一次休息之后;保持未覆盖状态,因此该方法的覆盖率为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;
}
具体见结束语:

这不是一个bug。理论上,$value可以不是1、2或3,在这种情况下,switch()不会因为其中一个值而离开。Xdebug无法对“doSomething()”返回的内容进行假设,也无法知道返回的内容是否超过1、2或3。每个函数和方法的最后一个}包含一个隐式的“returnnull;”——PHP将其视为可执行代码。因为有一个可能的代码路径,}没有命中,所以它被标记为“未执行”

在你的案例中,你有三个案例陈述,我想你已经为之编写了测试,但还有第三个隐含的路径,你可能要测试,也可能不测试——如果三个案例都不匹配怎么办


tl;dr:在交换机中添加一个
默认值
案例,并确保您的测试能够使用它。或者不要忽略覆盖线。

Hmm但我无法添加默认情况,这在我的模块中没有意义。是的,我有执行每个给定案例的测试。如果没有一个案例匹配,那么我有最后一个“returntrue”,表示我没有错误。对于这种情况,我也有测试。我对每个回路线和交换机内的每个案例都进行了测试。此外,Xdebug不应该对可能发生的情况做出任何假设。代码正在执行,每隔一行摘录这一行标记为绿色。