如何模拟界面的一种方法?

时间:2015-11-19 20:27:33

标签: php phpunit

我想模拟一个接口的validate方法,并让所有其他接口方法存根返回null(我真的不关心它们会发生什么),但似乎没有这样做很容易。

这就是我所拥有的:

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

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

    $validator->validate();

运行这个给我一个致命的错误:

  

类Mock_ValidatorInterface_56c4c003包含6个抽象方法和   因此必须宣布抽象或实施其余方法

所以 - 我需要以某种方式告诉PHPUnit存根接口所需的其他方法。什么是正确的方法?

1 个答案:

答案 0 :(得分:6)

->setMethods()中声明所有界面的方法。

通常,您模拟一个类并仅在->setMethods()中声明某些方法。未经模拟的方法可以追溯到被模拟的原始类的实现。

但是如果你在模拟一个接口,那么所有方法都必须由mock实现。