如何在PHPUnit中模拟主义PersistentCollection - php

有谁知道如何嘲笑一个教义的PersistentCollection?

当我尝试直接使用PHPUnit和Mockery模拟类时,出现如下异常:

Mockery\Exception: The class Doctrine\ORM\PersistentCollection is marked final a

并且其方法无法替代。标记为final的类可以传递给\ Moc
kery :: mock()作为实例化对象以创建部分模拟,但仅当m
ock不受类型提示检查的约束。

我的研究表明,一旦方法标记为final,则Mockery和/或phpUnit不能使用反射。

然后,我尝试创建一个stdClass并为其提供迭代器将使用的方法(有效/当前/下一个),但是除非类实现了迭代器,否则foreach循环不会调用这些方法。

因此,以下代码不起作用...

$this -> collectionMock = \Mockery::mock('PersistentCollection, Traversable');
$this -> collectionMock -> shouldReceive('rewind');
$this -> collectionMock -> shouldReceive('valid') -> andReturn('true');
$this -> collectionMock -> shouldReceive('next');
$this -> collectionMock -> shouldReceive('current') ->andReturn();

并且抛出似乎引发以下致命错误:

Fatal error: Cannot redeclare Mockery_1670979900_PersistentCollection_Traversable::rewind() 
in C:\zendProject\zf2\vendor\mockery\mockery\library\Mockery\Generator.php(129) :
eval()'d code on line 43

有没有人想出模拟这个课程的好方法

参考方案

我似乎无法模拟被声明为final的类。但是,可能会有一些希望。由于PersistentCollection同时实现Doctrine\Common\Collections\CollectionDoctrine\Common\Collections\Selectable,因此您可以使用Mockery模拟实现两个接口的对象。

Mockery::mock(
    'Doctrine\Common\Collections\Collection, Doctrine\Common\Collections\Selectable'
);

我在自己的一个项目中used this to good effect。

至于为什么不能模拟期末班,这是我能找到的最好的:

嘲讽

使用Mockery模拟最终课程的能力为limited:

同样,主要目的是确保模拟对象继承用于类型提示的特定类型。有一个例外,就是标记为final的类或标记为final的方法无法完全模拟。在这些情况下,必须使用部分模拟(稍后说明)。

$mock = \Mockery::mock('alias:MyNamespace\MyClass');

在链接的页面中搜索“最终”。您会找到我能找到的所有文档。

PHPUnit

尝试在PHPUnit throws an exception by design中模拟最终类。

验证IBAN PHP - php

在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php:将分钟取整到最近的四分之一小时,然后执行更多操作 - php

最初的问题是这样的:取分钟数->转换为四分之一小时-> 1个四分之一小时为1个单位->输出单位我今天整天都在整理页面,几分钟前我的大脑就停止工作了,我只是不知道如何输出单位数量。我知道在此网站上发布问题会有所帮助。因此,用户输入的分钟数(不是小时和分钟,而是数分钟),站点需要输出单位数量。单位是一个刻钟。分钟总是四舍五入到最近的四分之一小时…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…