IntelliJ IDEA不会运行PHPUnit 4.0测试

时间:2014-04-02 00:54:28

标签: intellij-idea phpunit

有时,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停止并抱怨它无法替换文件。
  • 设置“run-before”命令以自动修补文件是不够的,因为它似乎不适用于调试或代码覆盖,只能定期运行。

1 个答案:

答案 0 :(得分: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,找到里面的compresesd文件:

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插件,它可能会覆盖修复程序,您需要重新应用它。