PHPUnit必须要求Composer \ Autoload \ ClassLoader.php吗?

时间:2017-07-28 04:26:56

标签: php phpunit composer-php

尝试集成PHPUnit和我的IDE(PhpStorm 2017.2)。我直接执行phpunit.phar文件(版本5.7.21),因为我没有使用Composer,也没有安装它。

phpunit.xml

<phpunit bootstrap="phpunit-bootstrap.php">
    <testsuites>
        <testsuite name="Test suite">
            <directory>./</directory>
        </testsuite>
    </testsuites>
</phpunit>

PHPUnit的-bootstrap.php中

spl_autoload_register('my_autoload');

/**
 * @param string $className Fully qualified name to autoload
 */
function my_autoload($className){
    require $_SERVER['DOCUMENT_ROOT'] . "\\$className.php";
}

当我执行项目文件时,此自动加载器正常工作。但是当我尝试运行任何PHPUnit测试时,我看到了这个错误:

  

致命错误:require():无法打开所需的&#39; \ Composer \ Autoload \ ClassLoader.php&#39;

如果删除自动加载,则无法再找到我的项目类(相同的错误,不同的类名)。

PHPUnit是否依赖于全局安装并在系统路径上可用的Composer?

更新1

根据kuba的评论建议,我将自动加载更改为:

require __DIR__ . "\\$className.php";

新错误:

  

致命错误:require():无法打开所需&#39; C:\ project-root \ Composer \ Autoload \ ClassLoader.php&#39;

1 个答案:

答案 0 :(得分:1)

我需要调整自动加载器,以便在PHP尝试加载Composer\Autoload\ClassLoader.php时不执行任何操作。所以我改变了自动加载器:

function my_autoload($className){
    require __DIR__ . "\\$className.php";
}

function my_autoload($className){
    $path = __DIR__ . "\\$className.php";
    if (file_exists($path)) require $path;
}