【问题标题】:PHPUnit can't find path, extra folders added by PhpStormPHPUnit 找不到路径,PhpStorm 添加的额外文件夹
【发布时间】:2017-12-10 13:29:09
【问题描述】:

我正在运行 phpunit,它给了我一个错误

PHP Fatal error:  Class 'MyApp\MyBundle\Tests\Units\Classes\Action\ActionTestCase' not found in /var/www/src/tests/src/MyApp/MyBundle/Classes/Action/KeywordTest.php on line 7

在那个班级是

5 use MyApp\MyBundle\Tests\Units\Classes\Action\ActionTestCase as TestCase;
6
7 class KeywordTest extends TestCase {

我无法理解的是,ActionTestCase 存在,但在MyApp\MyBundle\Classes\Action\ActionTestCase

当我使用 PhpStorm 的自动完成功能时,它使用带有\Tests\Units 部分的路径。这是它找到的唯一路径,如果我在那里双击它会指向正确的类。然而 PHPUnit 并没有找到它。

这个额外的路径是在哪里添加的?在 PhpStorm 或 Composer 或其他地方?

composer.json 文件包含这个

"autoload": {
    "psr-0": {
        "": "src/"
    }
}
,
"autoload-dev": {
    "psr-4": {
        "": "src/tests"
    }
},

phpunit.xml 文件包含这个

<phpunit bootstrap="app/autoload.php"> 

【问题讨论】:

  • Phpstorm 扫描所有项目文件。 Phpunit 没有。 Phpunit 使用所有可用的类(当它被执行时),通常是自动加载器。当您通过 Phpunit 运行测试套件时,检查您的项目自动加载器是否可用的 Phpunit 引导。
  • 您的 ActionTestCase 在文件系统上的什么位置?
  • @JakubZalas 在MyApp\MyBundle\Classes\Action\ActionTestCase
  • PhpStorm 中项目顶层的完整路径是src\tests\src\MyApp\MyBundle\Classes\Action\ActionTestCase
  • 你的 autoload-dev 在 composer.json 中是如何配置的?

标签: phpunit composer-php phpstorm


【解决方案1】:

将测试移出 src 听起来是个不错的建议(关于 Jakub Zalas comment),您最好说出这是否适合您。

不管怎样,开发自动加载器没有为该路径正确配置:

"autoload-dev": {
    "psr-4": {
        "": "src/tests"
    }
},

会查找文件

src\tests\MyApp\MyBundle\Classes\Action\ActionTestCase.php

但是你有文件

src\tests\src\MyApp\MyBundle\Classes\Action\ActionTestCase.php
          ^^^

添加缺少的src/ 部分应该可以正常工作:

"autoload-dev": {
    "psr-4": {
        "": "src/tests/src/"
    }
},

别忘了再次转储自动加载:

composer dump-autoload

在您更改 composer.json 之后。

【讨论】:

  • 谢谢,我以前从未尝试过转储自动加载。我试过这个,它仍然给我类发现错误。问题是,其他文件夹中的测试确实有效,所以我认为问题来自在这种特殊情况下发现的 \Tests\Units 部分 - 我不知道在自动完成中插入的位置或原因。我将尝试将测试移到 src 之外的自己的文件夹中,但我怀疑它与此无关,因为它适用于其他测试类。
  • 是的,我将测试移至与 src 相同的级别,更改了 composer 文件和 dump-autoload,它给了我找不到相同的类。
  • 不知道您在同一个命名空间和目录中有正在工作的自动加载测试(真的吗?或者这些文件只是包括在内并且不需要自动加载器...)。也许只是对配置的误解,composer中的dump-autoload重新创建了composer的自动加载器,例如当您更改自动加载器的 composer.json 时。
  • 不确定发生了什么,但现在似乎可以了。现在,当我使用 PHPStorm 的自动完成功能时,它会找到位置 tests\src\MyApp\MyBundle...
猜你喜欢
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多