getMockBuilder(QueryBuilder::class) ->disableOriginalConstructor() ->getMock(); $mocker = $this->getMockBuilder(AccessExtensionInterface::class); $ext1 = $mocker->getMock(); $ext1->method('support')->willReturn(false); $ext2 = $mocker->getMock(); $ext2->method('support')->with('foo')->willReturn(true); $ext2->expects($this->once())->method('addWhere')->with($queryBuilder)->willReturn(true); $ext3 = $mocker->getMock(); $ext3->method('support')->willReturn(false); $extensions = [$ext1, $ext2, $ext3]; $iterator = new CurrentAccessExtensionIterator($extensions); $actualExt = $iterator->addWhere($queryBuilder, 'foo'); $this->assertEquals(true, $actualExt); } public function testAddWhereError() { $queryBuilder = $this->getMockBuilder(QueryBuilder::class) ->disableOriginalConstructor() ->getMock(); $mocker = $this->getMockBuilder(AccessExtensionInterface::class); $ext1 = $mocker->getMock(); $ext1->method('support')->willReturn(false); $ext2 = $mocker->getMock(); $ext2->method('support')->willReturn(false); $extensions = [$ext1, $ext2]; $iterator = new CurrentAccessExtensionIterator($extensions); $this->expectException(Exception::class); $iterator->addWhere($queryBuilder, 'foo'); } }