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.json
和 phpunit-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_VERSION
或SYMFONY_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