如何模拟接口的一个方法


How do I mock one method of an interface?

我想模拟一个接口的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存根接口所需的其他方法。做这件事的正确方法是什么?

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

通常,您模拟一个类,并且只在->setMethods()中声明某些方法。未被嘲笑的方法返回到被嘲笑的原始类上的实现。

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