You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yii2环境下实现Codeception 100%路径覆盖率?

路径覆盖率无法达到100%的排查与解决

环境信息

  • Yii2框架
  • PHP 8.1.6
  • php-code-coverage 9.2.26
  • Codeception + PHPUnit 9.6.8

目标函数代码

public function checkPaths($a, $b) {
    if($a && $b) {
        echo " Both set! ". $a . " : ". $b;
    }
}

现有测试用例问题

你当前的测试用例里用了expect($model->checkPaths($a, $b)),但checkPaths没有返回值,默认返回null。Codeception的expect()默认断言传入值为真,这会导致前三次调用的测试断言失败,进而可能跳过部分路径的执行(即便你看到测试通过,也可能是配置了宽松的断言规则)。

修正后的测试用例

移除不必要的expect断言,直接调用方法即可:

public function testCheckPaths()
{
    $model = new checkPath();

    // 覆盖$a为假、$b为假的路径
    $a = null; $b = null;
    $model->checkPaths($a, $b);

    // 覆盖$a为假、$b为真的路径
    $a = null; $b = 10;
    $model->checkPaths($a, $b);

    // 覆盖$a为真、$b为假的路径
    $a = 5; $b = null;
    $model->checkPaths($a, $b);

    // 覆盖$a为真、$b为真的路径
    $model->checkPaths(5, 10);
}

100%路径覆盖率验证

修正测试用例后,重新生成覆盖率报告即可达到100%。原因如下:

  • 函数checkPaths的控制流只有3条核心路径:
    1. $a为假 → 跳过if块
    2. $a为真但$b为假 → 跳过if块
    3. $a和$b都为真 → 执行echo语句
  • 修正后的测试用例完整覆盖了这3条路径,之前的3/4统计异常是因为无效断言导致部分路径未被正确执行。

额外排查点

如果修正后仍未达到100%,请检查:

  • php-code-coverage配置是否排除了该类/方法的代码统计
  • Codeception测试是否实际执行了所有4个测试步骤(查看测试输出的执行日志)
  • 是否存在php-code-coverage版本兼容问题(可尝试升级至同系列最新版)

内容的提问来源于stack exchange,提问作者Nitin Ahire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:15:36