不久前,我开始在 PHPUnit (v. 9) 中编写测试。这很棒而且令人惊奇,但是:
如何正确涵盖条件语句?
我将给出一些例子,其中结果是正确的和预期的,以及我发现问题的地方。这里是:
请注意,下面的代码只是示例。
我知道当我传递
true到if语句时,将没有机会转到代码的其他分支。这只是尽可能简单的示例。
问题不存在的情况:
if (true) {
return 'true';//here is covered
}
return 'false';//here is not covered
Run Code Online (Sandbox Code Playgroud)
这没关系,但是如下:
return (true) ? 'true' : 'false';
Run Code Online (Sandbox Code Playgroud)
整行被视为覆盖,但显然 false 永远不会返回。
所以。我做什么坏事了?
唯一的解决方案是不使用三元运算符?它的语法非常短,但由于缺乏有关覆盖率的(真实/错误)信息而容易出错。:(