如何配置 PhpStorm 以使用 symfony/phpunit-bridge

How to configure PhpStorm to use symfony/phpunit-bridge

在使用 Symfony 3.3 时,我在配置 PhpStorm IDE 以使用 http://symfony.com/doc/current/components/phpunit_bridge.html 时遇到了问题。

我决定只将 phpunit.phar 下载到 bin 并使用它。

Symfony 3.4(和 Symfony 4)甚至没有开箱即用的 phpunit.xml.dist,因此使用 phpunit.phar 很容易出现问题。

我已经使用 flex 安装了 PHPUnit:

composer req phpunit

这创建了 phpunit.xml.dist,我能够通过以下方式从命令行 运行 进行测试:

php bin/phpunit

但我还是无法让 PhpStorm 使用它。

所以我下载了phpunit.phar,它可以与提供的phpunit.xml.dist一起使用。

问题一:PhpStormIDE有没有办法使用phpunit-bridge?

问题 2:Symfony 4(phpunit-bridge 或 vanilla phpunit.phar)的最佳实践是什么?

这很简单,Symfony 的版本无关紧要,因为测试的概念仍然稳定。首先,您需要在 PHPstorm 首选项中配置测试框架 (screenshot), in your case, you can to use Vendored PHPUnit or downloaded manually, you can join in the PHPUnit library section. Then you need to add Run/Debug configuration"phpunit/phpunit""symfony/phpunit-bridge" 如我所见已安装,仅此而已。

我通常做的是将我在 PHPStorm 上的 phpunit 测试框架指向由桥创建的秘密 .phpunit 目录,例如:

"phar" 文件的位置是:

bin/.phpunit/phpunit-(major).(minor)/phpunit

或者在某些情况下:

vendor/bin/.phpunit/phpunit-(major).(minor)/phpunit

此后,指定的 phpunit 可执行文件将在执行单元测试时被正确调用,但带有 --no-configuration 选项。这会导致自动加载问题(很多 "class not found" 错误),因为 Composer 生成的自动加载器没有在任何地方指定。

要解决此问题,您的项目中应该有一个 phpunit.xml 文件(无论如何这是常见的做法),您可以在其中指定 Composer 的自动加载器,如下所示:

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

然后应在 "Default configuration file" 选项中指定此 phpunit.xml,您应该可以开始了。


关于使用 phpunit-bridge 的 phpstorm: 它可以作为自定义脚本,但您不会有漂亮的界面,也无法通过 PHPStorm 界面 运行(和调试)特定测试。

我使用此配置成功 运行 symfony/phpunit-bridge:

  • PhpStorm 2018.2.5
  • Symfony 4.1.x
  • PHP 7.1 运行宁 docker
  • "symfony/test-pack": "^1.0"

步骤:

composer require --dev symfony/test-pack 之后我在目录 /vendor/bin 中有文件 simple-phpunit 应该 运行 symfony/phpunit-bridge 就好了。

然后在PhpStorm中File | Settings | Languages & Frameworks | PHP | Test Frameworks设置:

  • 单选select到Path to phpunit.phar选项
  • Path to phpunit.pharsimple-phpunit 文件的绝对路径(例如 /application/vendor/bin/simple-phpunit
  • 检查 Default configuration file: 并将输入值设置为 phpunit.xml.dist 的绝对本地化(在我的例子中 /application/phpunit.xml.dist

注意:phpunit.xml.dist 文件应配置为使用 symfony/phpunit-bridge - 检查 https://symfony.com/doc/current/components/phpunit_bridge.html

单击 Appply/Ok,现在您可以 运行 从 PhpStorm 界面进行测试

除了给出的答案,值得一提的是,秘密 .phpunit 目录不会凭空出现。

composer req phpunit之后,必须先运行 phpunit脚本,例如:

bin/phpunit

这将下载 PHPUnit 的本地副本并将其放在同一文件夹中,因此 phar 可执行文件的路径将为:

// path may differ, at the time being is:
bin/.phpunit/phpunit-6.5-0/phpunit

接受的答案对我使用 PHPStorm 2020.1 和 Symfony 5.2

无效

我发现如果我为 'Path to phpunit.phar' 应用空白值,它会起作用,尽管首选项对话框会抱怨“!phpunit.phar 的路径是空的”。

因此在首选项 > 语言和框架 > PHP > 测试框架中: