PHPUnit 找不到类

Posted

技术标签:

【中文标题】PHPUnit 找不到类【英文标题】:PHPUnit does not find a class 【发布时间】:2019-07-22 19:49:07 【问题描述】:

我正在为 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\” 

使用与原始代码相同的命名空间是否有问题?在作曲家中将相同的命名空间注册到不同的位置?为什么它在运行时有效,但在测试中无效?

【问题讨论】:

【参考方案1】:

原来 PHPUnit 有自己的自定义引导加载程序。当我在我的 PHPUnit 引导加载程序中为它添加一个 require_once() 时,它加载成功。感谢 PHP subreddit 上的用户。

【讨论】:

以上是关于PHPUnit 找不到类的主要内容,如果未能解决你的问题,请参考以下文章

php thinkphp vender第三方类找不到类怎么解决

Eclipse中HttpServlet类找不到

PHPUnit:使用@dataProvider时“找不到类'Eloquent'”

PHP 致命错误:找不到类 - PHPUnit

phpunit 找不到类,PHP 致命错误

RegistryKey与RegistryValue类找不到问题处理