Mockery, Codeception 和 Symfony - 无法重新声明类

Posted

技术标签:

【中文标题】Mockery, Codeception 和 Symfony - 无法重新声明类【英文标题】:Mockery, Codeception and Symfony - Cannot redeclare class 【发布时间】:2016-07-09 16:32:23 【问题描述】:

我有一个现有单元测试的以下部分(启用了 Mockery 模块):

$mockedEvent = \Mockery::mock('\Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent');

此测试运行良好并且成功,但是一旦 Codeception 使用 Symfony2 模块进行我的功能测试,我就会收到以下错误:

php Fatal error:  Cannot declare class Symfony\Component\HttpFoundation\Request, because the name is already in use in /projectDir/var/bootstrap.php.cache on line 365

不知何故,我的单元测试中声明的类导致我的功能测试出现问题,这导致我无法按预期使用 Mockery。如何避免此错误?

【问题讨论】:

请使用 -vvv 标志运行 Codeception 并将完整的堆栈跟踪添加到您的问题中。 【参考方案1】:

将 Codeception 升级到 2.2 后,此错误消失。 - 尽管现在 Codeception 在到达功能测试时经常会出现段错误,并且仅在仅运行功能测试(有效)时才能再次工作,然后整个测试套件再次运行良好。根据我的经验,Codeception 总是发生一些奇怪的事情。

【讨论】:

以上是关于Mockery, Codeception 和 Symfony - 无法重新声明类的主要内容,如果未能解决你的问题,请参考以下文章

Yii2中如何使用CodeCeption

PHPunit 和 Mockery:找不到方法

Codeception\Util\Stub 方法 ::exactly 和 ::once 不起作用

使用 Laravel 和 Mockery

Mockery 中的重载和别名有啥区别?

codeception - 模拟 api 调用数据