public function testFetchItem() { $data = [1 => 'test']; $counter = 0; $statementMock = $this->getMock('Zend_Db_Statement_Pdo', ['fetch'], [], '', false); $statementMock->expects($this->exactly(2))->method('fetch')->will($this->returnCallback(function () use(&$counter, $data) { return ++$counter % 2 ? [] : $data; })); $adapterMock = $this->getMock('Magento\\Framework\\DB\\Adapter\\Pdo\\Mysql', ['select', 'query'], [], '', false); $selectMock = $this->getMock('Magento\\Framework\\DB\\Select', [], ['adapter' => $adapterMock]); $adapterMock->expects($this->once())->method('query')->with($selectMock, $this->anything())->will($this->returnValue($statementMock)); $adapterMock->expects($this->once())->method('select')->will($this->returnValue($selectMock)); $this->collection->setConnection($adapterMock); $this->assertFalse($this->collection->fetchItem()); $objectMock = $this->getMock('Magento\\Framework\\DataObject', ['setData'], []); $objectMock->expects($this->once())->method('setData')->with($data); $this->entityFactoryMock->expects($this->once())->method('create')->with('Magento\\Framework\\DataObject')->will($this->returnValue($objectMock)); $this->assertEquals($objectMock, $this->collection->fetchItem()); }