首页 > 解决方案 > 使用代码覆盖率处理无法访问的代码

问题描述

我的项目具有检查数字是否在范围内的方法

public function foo(int $number): string
{
    // simple logic to get my point across

    if ($number > 0) {
        return 'foo';
    }

    if ($number === 0) {
        return 'bar';
    }

    if ($number < 0) {
        return 'baz';
    }

    assert(0);
}

在这个简单的示例中,函数将始终在 if 语句之一处返回。但是,使用phpunits 代码覆盖率,最后一个assert(0);被标记为未执行。

作为一名程序员,我想明确指出,如果程序达到这一点是不合法的,如果达到了,那就是开发人员的错。但是,这确实会引入“无法访问”的代码,例如如果开发人员正确实现了上述逻辑,则永远不会执行。

我对达到 100% 代码覆盖率分数的解决方法不满意。这就是我现在处理它的方式:

public function foo(int $number): string
{
    $value = null;

    if ($number > 0) {
        $value = 'foo';
    }
    if ($number === 0) {
        $value = 'bar';
    }
    if ($number < 0) {
        $value = 'baz';
    }

    return $value;
}

这是达到 100% 代码覆盖率分数的正确方法,还是我应该放弃该目标并在代码底部使用未经测试的assert(0);/ ?throw new Exception()

标签: phpphpunitcode-coverage

解决方案


推荐阅读