任何人都可以告诉我为什么这一行在最后一次休息之后;保持未被覆盖,因此该方法的覆盖范围为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;
}
答案 0 :(得分:1)
请参阅this bug report,特别是密切注释:
这不是错误。理论上,“$ value”可能不是1,2或3,在这种情况下,switch()将不由于其中一个值而离开。 Xdebug不能对“doSomething()”返回的内容做出假设,无法知道所有返回的内容都不是1,2或3.每个函数和方法的最后一个包含一个隐式的“返回NULL”; - 哪个PHP看作可执行代码。因为有一个可能的代码路径没有命中},所以它被标记为“未执行”。
在你的情况下,你有三个案例陈述,我想你已经为它们编写了测试,但是你可能会或可能不会测试第三个暗示路径 - 如果这三个案例中没有一个匹配怎么办?
tl; dr:在交换机中添加default
案例,并确保您的测试能够运用它。或者不要忽略该覆盖线。