2015-11-19 37 views
4

我想模擬一個接口的validate方法,並讓所有其他接口方法存根返回null(我並不在乎他們會發生什麼),但似乎沒有辦法很容易地做到這一點。如何模擬接口的一種方法?

這是我有:

$validator = $this 
     ->getMockBuilder('Symfony\Component\Validator\Validator\ValidatorInterface') 
     ->setMethods(array('validate')) 
     ->getMock(); 

    $validator 
     ->expects($this->once()) 
     ->method('validate') 
     ->willReturn(array()); 

    $validator->validate(); 

運行這給了我一個致命錯誤:

Class Mock_ValidatorInterface_56c4c003 contains 6 abstract methods and must therefore be declared abstract or implement the remaining methods

所以 - 我需要以某種方式告訴PHPUnit的存根,接口要求的其他方法。什麼是正確的方法來做到這一點?

回答

4

->setMethods()中聲明所有接口的方法。

通常,你嘲笑一個類,只在->setMethods()中聲明某些方法。未嘲笑的方法可以回溯到被嘲笑的原始類的實現。

但是,如果你嘲笑一個接口,所有的方法都必須通過模擬來實現。

相關問題