这个致命错误从何而来?cakephp phpunit)



我用composer创建了一个cakephp3项目。

composer create-project --prefer-dist cakephp/app foobar
然后,我用 创建了一个helper。
bin/cake bake helper Progress

并复制粘贴了cakephp测试教程中的helper-example在目录中切换并执行phpunit表示

PHP Fatal error:  Class CakeTestSuiteFixtureFixtureInjector contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (PHPUnit_Framework_TestListener::addWarning) in /home/matthias/www/isbn.localhost/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php on line 173
PHP Stack trace:
PHP   1. {main}() /usr/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:42
PHP   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:138
PHP   4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:186
PHP   5. PHPUnit_TextUI_TestRunner->handleConfiguration() /home/matthias/www/foobar/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:145
PHP   6. require_once() /home/matthias/www/foobar/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:771
Fatal error: Class CakeTestSuiteFixtureFixtureInjector contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (PHPUnit_Framework_TestListener::addWarning) in /home/matthias/www/foobar/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php on line 173
Call Stack:
    0.0001     225152   1. {main}() /usr/bin/phpunit:0
    0.0031     515440   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:42
    0.0031     516064   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:138
    0.6384    6931096   4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:186
    0.6384    6932312   5. PHPUnit_TextUI_TestRunner->handleConfiguration() /home/matthias/www/foobar/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:145
    0.6458    7043088   6. require_once('/home/matthias/www/foobar/vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php') /home/matthias/www/foobar/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:771

使用全局安装的phpunit 4.2.6或最新版本(与composer一起安装)无关。这是从哪里来的,我该如何解决这个问题?

非常感谢!

当你的CakePHP本地安装了一个PHPUnit时,不要使用全局PHPUnit安装,因为你可以看到这会发生冲突,看看堆栈跟踪,你从/usr/bin/phpunit开始,然后跳到/home/matthias/www/foobar/vendor/phpunit/phpunit/...

也就是说,你似乎在你的CakePHP应用程序中安装了"错误"的PHPUnit版本,上面提到的方法addWarning是在PHPUnit 5.1 alpha中引入的!整个5。x分支还不稳定,CakePHP 还不兼容最近才更新(尚未发布)以支持这些更改,所以现在你应该安装stable 4。X分支,如

$ composer require --dev phpunit/phpunit:~4.0

不幸的是,prefer-stable选项(在CakePHP应用程序框架composer.json中默认设置为true)似乎在这里没有帮助,因为Composer在不指定自己的版本时(即使只是*)会选择~5.1@dev。

最新更新