我用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。