【问题标题】:Must PHPUnit require Composer\Autoload\ClassLoader.php?PHPUnit 必须需要 Composer\Autoload\ClassLoader.php 吗?
【发布时间】:2018-01-04 00:20:35
【问题描述】:

尝试集成 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(): 无法打开所需的 '\Composer\Autoload\ClassLoader.php'

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

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

更新 1

按照 kuba 在 cmets 中的建议,我将自动加载更改为:

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

新错误:

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

【问题讨论】:

  • 当您从控制台运行phpunit.phar$_SERVER['DOCUMENT_ROOT'] 为空,您是否尝试将其更改为__DIR__ 或类似的东西?
  • @kuba 你是对的 DOC_ROOT 是空的。我改成__DIR__;不过类似的错误(更新的 OP)

标签: php phpunit composer-php


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2015-02-21
    • 2018-06-06
    • 2015-06-06
    • 2016-03-02
    • 2014-01-29
    • 2019-09-27
    • 2014-10-05
    • 2017-07-24
    • 1970-01-01
    相关资源
    最近更新 更多