我的问题是,我必须模拟一个类,它扩展了\ArrayObject,并且我想在一个程序中使用这个模拟对象,但是我得到了这个异常:
异常: Mock_ItemCollection_3ab4029b::getIterator()返回的对象必须是可遍历的或实现接口Iterator
我已经检查了手册和代码中的实际类型(带有instanceof),我得到的对象是可遍历的(但不是Iterator)。
我该如何解决这个问题?(顺便说一句,原来的班很有经验)
更新:--这是我试图模拟类的方式:
class ItemCollection extends \ArrayObject implements StatefulInterface, ItemCollectionInterface {...}
$mockIC = $this->getMockBuilder('\SK\API\Model\ItemCollection\ItemCollection')
->setConstructorArgs(array($this->container->get('mongo.db')))
->getMock();发布于 2013-07-30 08:11:18
原因是phpunit将从ItemCollection中对所有方法进行存根(因为您没有指定它们中的任何一个)。如果您将指定至少一个方法(例如,通过setMethods方法),那么phpunit将只对这些指定的方法进行存根,其余方法将保留在原始类中(例如,getIterator方法)。
所以,问题是-你为什么要模仿那门课?如果希望存根/模拟其中的一个方法,那么只对该方法执行:
$mockIC = $this->getMockBuilder('\SK\API\Model\ItemCollection\ItemCollection')
->setMethods(array('methodYouWantStub'))
->setConstructorArgs(array($this->container->get('mongo.db')))
->getMock();https://stackoverflow.com/questions/17926744
复制相似问题