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

Bri*_*ian 6 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();
Run Code Online (Sandbox Code Playgroud)

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

类Mock_ValidatorInterface_56c4c003包含6个抽象方法,因此必须声明为abstract或实现其余方法

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

cil*_*fen 6

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

通常,您模拟一个类,只声明某些方法->setMethods().未经模拟的方法可以回溯到被模拟的原始类的实现.

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