运行 PhpStorm 中的 PHPUnit 测试添加了“--teamcity”选项导致错误

Running PHPUnit test in PhpStorm adds "--teamcity" option causing error

我有最新的 PhpStorm (2016.2) 和 PHPUnit phar (5.5.4)。出于某种原因,当我在 PhpStorm 的项目中 运行 进行 PHPUnit 测试时,它在 --teamcity 添加到 运行 命令,导致失败:

Testing started at 12:52 PM ...
Unit test suite invoked with a path to a non-unit test: --teamcity
Process finished with exit code 1

我不知道这个 --teamcity 选项是从哪里来的,无论我 运行 进行什么测试,它都会发生,即使是从空白配置开始。我也没有安装 TeamCity 插件,我什至不使用 TeamCity。

完整命令如下所示:

/usr/local/Cellar/php70/7.0.9/bin/php /Users/name/bin/phpunit-5.5.4.phar --configuration /path/to/config/my-phpunit.xml ClassNameTest /Users/name/PhpstormProjects/path/to/tests/unit/app/ClassNameTest.php --teamcity

(敏感信息换出)

我想做的就是摆脱这个 --teamcity 选项,如果我 运行 在一个单独的终端 window 中没有那个选项,一切都会正常。这只是最近才开始发生,可能是在 PhpStorm 更新之后。

问题出在项目内部。 PHPUnit 不包含该错误消息。抱歉!

我为此苦苦挣扎了半天。根本问题是在 PHPUnit 版本之间切换 (6.x.x -> 4.x.x)。 (通过切换分支发生在我身上)

单击 PHPUnit 首选项中的刷新按钮即可解决此问题。

(Languages & Frameworks > PHP > PHPUnit)

确保它认为您拥有的 PHPUnit 版本与它报告的版本相匹配。

tl;dr

我只能通过从系统中删除系统安装的 phpunit 实例来解决这个问题 (Linux):

sudo apt remove phpunit-*

详情

即使PhpStorm中的设置是使用composer autoloader:

出于某种原因,它最终使用了 /usr/share/php/PHPUnit/Util/Log/TeamCity.php 中的 TeamCity:

项目的本地 PHPUnit 是 6.2 而系统默认是 5.1 -> 它们不兼容。

这个--teamcity选项被PHPStorm用来输出测试结果。

您遇到的问题是由 PHP7 和旧版本的 PHPUnit 引起的。

删除您的 PHPUnit 5 并使用 composer 安装最新版本(当前为 6.2)并改用 PHPUnit 命名空间。

有关此错误的更多信息:https://github.com/sebastianbergmann/phpunit/issues/2460