有时,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所需的新方法。
我尝试过不工作的事情:
答案 0 :(得分:18)
我发现的最佳解决方案是通过手动修复来修补IntelliJ安装。这些说明假设Linux路径,但在Windows上应该可以使用相同的基本过程。
首先,在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内的scripts/phpunit.php
。根据您的ZIP工具,这可能就像双击文件以打开它,保存更改并单击确认提示一样简单,但这取决于您使用的内容。
现在你应该完成!使用PHPUnit运行,调试或生成代码覆盖率数据应该只需单击按钮即可。
请注意,如果您更新PHP插件,它可能会覆盖修复程序,您需要重新应用它。