3

当我尝试使用此命令运行失败的测试时: ./vendor/bin/phpunit 我收到此致命错误:

PHPUnit 5.7.20 by Sebastian Bergmann and contributors.

PHP Fatal error:  Class 'PHPUnit\Framework\ExpectationFailedException' 
not found in /var/www/zend/vendor/zendframework/zend-
test/src/PHPUnit/Controller/AbstractControllerTestCase.php on line 444
4

3 回答 3

4

您的 phpunit 版本可能对于您的 Zend 版本来说太旧了。该类PHPUnit\Framework\ExpectationFailedException已在 PhpUnit 6.X 中重命名PHPUnit_Framework_ExpectationFailedExceptionExpectationFailedException

请检查您的 PhpUnit 版本:phpunit --version应该是 6.X。将其更新到最新版本以避免此错误。

于 2017-06-20T14:04:30.593 回答
3

这是 zend-test 中的配置缺陷。它使用 Phpunit 6 中的类,但根据 Composer 的要求,该版本之前的 Phpunit 可以要求

    "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0",

很可能是你的系统因为 PHP 版本不满足 Phpunit 6 的要求,安装了下一个较低的版本。

由于基本测试用例(https://github.com/zendframework/zend-test/blob/master/src/PHPUnit/Controller/AbstractControllerTestCase.php#L444)中的代码使用了 Phpunit 6 类,我强烈假设当 Zend-Test 项目发现配置缺陷时,您甚至无法再在系统上安装。

因此升级到最近的 PHP 版本,然后运行

composer update

如果您对 PHP 版本不满意,请将 zend-test 降级到支持旧 Phpunit 版本的版本。我不太了解那个项目,所以只是一个建议,我不知道这样的版本是否存在或者甚至不能推荐。

我提交了一份报告,可能使用该类是一种疏忽,或者解决依赖关系的难度较小:https ://github.com/zendframework/zend-test/issues/50

于 2017-06-20T23:24:06.763 回答
3

这已由 Zend\Test 中的一个脚本“修复”,phpunit-class-aliases.php但由于它位于该autoload-dev部分中,因此未正确配置恕我直言(这意味着它不会传播到其他项目。)

因此,在您的项目 composer.json 中,执行以下操作:

"autoload-dev": {
    "files": [
        "vendor/zendframework/zend-test/autoload/phpunit-class-aliases.php"
    ]
},

然后composer install

NBZend\Test有一个 pull request 可以解决这个问题,但他们说这是 PHPUnit 的错(真遗憾 PHPUnit 4 for... idunno... 根据 Zend\Test 有错误的类名)所以,我已经完成了它改为:composer require illchuk/phpunit-class-aliases

于 2017-09-10T01:19:36.740 回答