【问题标题】:PHPUnit does not find a classPHPUnit 找不到类
【发布时间】: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\” }
}

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

【问题讨论】:

    标签: php composer-php phpunit


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 1970-01-01
      • 2012-04-28
      • 2017-02-24
      • 2017-11-23
      • 2015-07-14
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多