IntelliJ IDEA无法运行PHPUnit 4.0测试

7
有时候,IntelliJ IDEA在运行、调试或者显示 PHPUnit 测试的覆盖率方面会有问题。这可能是由于它生成的类与您拥有的 PHPUnit 版本不兼容导致的。
在我的情况下,是 IntelliJ IDEA 12.1.6 和 PHPUnit 4.0.14 不兼容,总是会出现以下错误信息:
/usr/bin/php /tmp/ide-phpunit.php --configuration /home/username/Documents/stuff/phpunit.xml.dist
Testing started at 5:32 PM ...
PHP Fatal error:  Class IDE_PHPUnit_Framework_TestListener contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (PHPUnit_Framework_TestListener::addRiskyTest) in /tmp/ide-phpunit.php on line 496
PHP Stack trace:
PHP   1. {main}() /tmp/ide-phpunit.php:0

Process finished with exit code 255

/tmp/ide-phpunit.php生成的代码中,缺少PHPUnit 4.x所需的新方法。

以下是我尝试过但无法解决问题的方法:

  • 手动修复文件并将其标记为只读会导致IntelliJ停止工作,并抱怨无法替换该文件。
  • 设置“运行前”命令以自动修补文件不足够,因为它似乎不能用于调试或代码覆盖率,只适用于常规运行。

http://youtrack.jetbrains.com/issue/WI-24198 - Sam Dark
@SamDark:关于这个问题已经有几个较旧的工单了,我不指望它能够及时得到修复。 - Darien
当然。我刚刚确保Jetbrains知道了这个问题,而他们似乎并不知道。 - Sam Dark
1个回答

18

我找到的最佳解决方案是使用手动修复程序来修补您的IntelliJ安装。这些说明假定Linux路径,但在Windows上应该可以进行相同的基本过程。

查找JAR文件

首先,在您的IntelliJ安装中找到php.jar文件。 JAR文件是一种ZIP文件,您可以使用相同的工具打开(和修改)这两种文件。 在我的系统上,它位于:

/home/username/.IntelliJIdea12/config/plugins/php/lib/php.jar

备份 php.jar,因为我们接下来要对其进行编辑。

提取模板

使用流行的 ZIP 文件工具(如 7-Zip)打开 php.jar,并找到其中的压缩文件:

scripts/phpunit.php

请将此文件提取到您可以编辑的临时位置。

将该方法添加到模板中

在文件内,我们需要找到类 IDE_PHPUnit_Framework_TestListener,在我的情况下大约在第 303 行附近。在该类中,我们需要添加一个新方法:

public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time){}

完成后请保存文件。

使用新模板更新JAR

现在,使用您的新版本覆盖JAR中的scripts/phpunit.php。根据您使用的ZIP工具,这可能只需要双击文件即可打开它,保存更改并单击确认提示,但这取决于您使用的工具。

重新启动IntelliJ

现在你应该完成了!使用PHPUnit运行、调试或生成代码覆盖数据应该只需要轻松点击一个按钮。

请注意,如果您更新PHP插件,它很可能会覆盖此修复程序,您将需要再次应用它。


我更喜欢坚持使用PhpUnit的LTS版本,直到JetBrains解决这个问题。正如Andrey在http://stackoverflow.com/questions/22531584/how-to-setup-phpunit-for-intellij-idea-13-1-on-ubuntu-13-10中所写的那样,他们正在处理这个问题。 - Christoph Grimmer
4
备注:对于Windows系统上的PhpStorm,php.jar文件位于{Program Files}\JetBrains\PhpStorm {version}\plugins\php\lib\php.jar路径下。 - Adrian Föder
1
在OSX上,使用“unzip php.jar”解压缩jar文件(到当前目录,请使用临时目录!),然后使用“jar cf php.jar *”重新打包jar文件。 - Steve Clay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接