2015-11-19 61 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()中声明某些方法。未嘲笑的方法可以回溯到被嘲笑的原始类的实现。

但是,如果你嘲笑一个接口,所有的方法都必须通过模拟来实现。

相关问题