【问题标题】:Function Code coverage not 100%功能代码覆盖率不是 100%
【发布时间】:2017-03-30 21:56:16
【问题描述】:

应该如何解决以下问题?我的功能在这里标记为 0% 覆盖率。后括号失败,我的覆盖率为 0%。

如果我添加 else return null,则会失败(可以理解 - 因为它不应该失败)。如果我保留 null 并将其全部放在一行上,如下所示:

if($this->save()){ return true; } return null;

然后它通过了。我是测试新手,不知道我在这里做错了什么?

【问题讨论】:

  • 也许return null; 从未联系过!?
  • 如果你返回 false 而不是 null 怎么办? if($this->save()){ 返回真; } 返回假;
  • 真的不能说,我发现的是这个coverage functionality is provided by the Xdebug extension 所以它不是 PHPUnit 本身,它从 xdebug 获取信息。不管我真的帮不上忙。
  • 一些测试框架有注释,用于在代码覆盖分析期间显式忽略某些行或代码块(例如 PHPUnit)。不过不知道 Codeception。

标签: php code-coverage codeception


【解决方案1】:

100% 的代码覆盖率意味着您正在测试每个函数的每一个结果。您的 return null 行被标记为未覆盖,因为您的测试没有分支到该行。

为了将其标记为已覆盖,您需要测试 $this->save() 返回 false 并测试您的方法是否返回 null

在某些情况下,获得 100% 的代码覆盖率是不可能的,或者会导致一些看起来非常愚蠢/奇怪的测试。在这些情况下,您可以简单地忽略测试该特定行。

编辑:如果您重写代码以返回truefalse,而不是truenull,您可以将您的方法重写为:

$expression = new Expression('SYSDATE');
$this->last_login = $expression;
return $this->save();

此代码应具有 100% 的代码覆盖率。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2018-07-17
    • 2017-10-09
    • 2022-11-30
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多