Symfony 5 Phpunit 未定义方法

Posted

技术标签:

【中文标题】Symfony 5 Phpunit 未定义方法【英文标题】:Symfony 5 Phpunit undefined method 【发布时间】:2020-09-03 02:27:15 【问题描述】:

我正在使用 Symfony 5,并使用 documentation 中包含的命令安装了 phpunit-bridge:composer require --dev symfony/phpunit-bridge

当我用这个命令运行 phpunit 时,php bin/phpunit,我有这个错误:

PHP 致命错误:未捕获的错误:调用未定义的方法 PHPUnit\TextUI\TestRunner::doRun()

【问题讨论】:

请分享更多细节。 好的,有哪些细节? 从任何事情开始。这是一种运行 PHPUnit 的标准方式,我无法想象它对每个人都不好。但是由于您没有显示任何内容(例如:任何人都可以重现问题的环境),因此几乎不可能提供任何提示 我正在使用 Symfony 5.0 和 Windows 7。我使用以下命令安装了 symfony/phpunit-bridge:composer require --dev symfony/phpunit-bridge。当我运行 php bin/phpunitI 来安装 PHPUnit 时,出现此错误:C:\cmder\roadtrip>php bin/phpunit PHP Fatal error: Uncaught Error: Call to undefined method PHPUnit\TextUI\TestRunner::doRun() in C :\cmder\roadtrip\bin\.phpunit\phpunit-7.5-0\src\TextUI\Command.php:206 【参考方案1】:

我会尝试猜测。

您还有一个像 liip/functional-test-bundle 或其他类似的捆绑包,它需要 PHPUnit 的需求(或者甚至您在 composer.jsonphpunit-bridge 中直接需要 PHPUnit)。

因此,您在项目中安装了两个不同版本的 PHPUnit,具有两个不同的 api。

如果安装 liip/functional-test-bundle 是您的情况并且您不想删除它,您需要通过桥安装与 Liip 捆绑包依赖项安装的相同 PHPUnit 版本。您可以通过SYMFONY_PHPUNIT_VERSION 环境变量或直接在bin/phpunit 文件中设置版本。或者您可以通过SYMFONY_PHPUNIT_DIR env 或直接在bin/phpunit 中重新定义已安装的PHPUnit 版本(在vendors/ 中)的路径。

注意:不能通过 .env.* 文件设置SYMFONY_PHPUNIT_VERSIONSYMFONY_PHPUNIT_DIR,因为bin/phpunit 不读取这些文件。所以它应该是真正的环境变量。

【讨论】:

我多次安装和卸载 orm-fixtures、phpunit、liip/tests 和 symfony/phpunit-bridge。现在,它正在工作。非常感谢。【参考方案2】:

symfony 5.1 也有类似的问题。我尝试升级所有与测试相关的开发包,但没有成功。 一旦我完全删除了所有开发(测试相关)包并重新安装了 symfony phpunit 桥包,它就可以工作了。 你必须删除根/bin目录下的phpunit文件

要遵循的步骤

    删除所有开发测试包(例如:composer remove symfony/browser-kit) 如果有以下包则删除:phpunit/phpunit、symfony/phpunit-bridge、symfony/css-selector、symfony/browser-kit 通过运行 composer require --dev symfony/phpunit-bridge 再次安装 brdge 包

【讨论】:

以上是关于Symfony 5 Phpunit 未定义方法的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 + Doctrine 2 + PHPUnit 3.5:闭包异常的序列化

在链配置的命名空间 App\Entity [Symfony 5.3][PHPUnit 8.5] 中找不到类 Mock_*

在 phpunit 测试中覆盖 symfony TokenAuthenticator

运行 PHPUnit 测试时,容器参数在 Symfony 5 服务中不可用/注入

Symfony PHPUnit 测试不验证用户

使用 Laravel 5.2 的 PHPUnit 未找到自定义异常