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第三方类找不到类怎么解决