PHPUnit实现100%代码覆盖率的不可访问语句

PHPUnit实现100%代码覆盖率的不可访问语句,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我让PHPUnit生成一个代码覆盖率,XDebug告诉它一些行尚未到达: public static function execute() { static $hasRun = false; if (false == $hasRun) { // first run: init Pat self::registerAutoloader(); self::registerPatIncludeDir(); $hasRun =

我让PHPUnit生成一个代码覆盖率,XDebug告诉它一些行尚未到达:

public static function execute()
{
    static $hasRun = false;

    if (false == $hasRun)
    { // first run: init Pat
        self::registerAutoloader();
        self::registerPatIncludeDir();

        $hasRun = true;
    }

    return $hasRun;
}
这将在测试之前运行。这样内部块就不会再运行了。 有没有办法到达if的街区?
还是先在PHPUnit中运行一个测试的方法?

您可以尝试使用进程隔离。我认为它会分别运行每个测试。此外,您可以将其作为类的一部分,而不是函数内部的静态值,这样至少可以修改该值(例如,通过反射)。在任何情况下,它都不属于那里,您编写代码的方式基本上是您要求不进行测试的:)$hasRun将永远不会被任何其他方法使用,但应该可以被任何其他实例访问。这就是为什么我在函数内部将其设置为静态。如果我在类中需要它作为一个新字段,那么什么时候在函数中使用静态变量?在我看来,PHP中静态类方法中的静态变量毫无意义。全局函数中的静态变量对于PHP手册中概述的情况是有意义的。就个人而言,我认为一个人应该完全避免静态变量,使用它们往往是思想缺失的迹象。如果在测试过程中,我遇到了一个静态变量的问题,因为我还没有处理它,我会重构代码,这样静态变量就消失了。如果您需要跟进,请随意