【问题标题】:How do I mock one method of an interface?如何模拟接口的一种方法?
【发布时间】:2015-11-19 20:27:32
【问题描述】:

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

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

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

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

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

    【讨论】:

    • 这需要在接口 X 获得另一种方法时更新所有对接口 X 使用此技术的测试用例。必须明确列出所有方法很糟糕。
    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多