PHPUnit找不到类

时间:2019-02-28 20:05:36

标签: php composer-php phpunit

我正在为PHP_CodeSniffer开发新的令牌生成器类。这也需要制定新的标准,因为在每个标准中都指定了有效的标记器。

我的新类使用的名称空间与原始代码库中的“兄弟”类相同。

如果我使用composer来安装项目并运行phpcs,则自动加载器似乎可以很好地获取我的新类。 PHP_CodeSniffer将通过调用以下命令加载我的令牌生成器:

$className = ‘PHP_CodeSniffer\\Tokenizers\\’ . $type;
$class = new $className(<stuff>);

类似地,我的自定义标准在原始代码库中有一个针对类的use语句。运行phpcs时,不会引发任何错误。

当我尝试在单元测试中通过phpcs运行测试文件时,出现错误,我的自定义嗅探文件无法在use语句中找到该类。我的猜测是这与自动加载有关。 phpunit的bootstrap.php文件需要__DIR__ . ‘/../vendor/autoload.php’。我的项目composer.json具有:

“autoload”: {
  “psr-4”: { “PHP_CodeSniffer\\”: “src\” }
},
“autoload-dev”: {
  “psr-4”: { “PHP_CodeSniffer\\Tests\\”: “tests\” }
}

使用与原始代码相同的名称空间是否存在问题?在Composer中将相同的名称空间注册到其他位置吗?为什么它在运行时有效但在测试中无效?

1 个答案:

答案 0 :(得分:0)

事实证明,PHPUnit具有自己的自定义引导程序。当我在PHPUnit引导加载程序中为此添加一个require_once()时,它已成功加载。感谢使用PHP subreddit的用户。