微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHPUnit:如何模拟私有方法?

参见英文答案 > Mock private method with PHPUnit                                    9个
我有一个这样的课:

class A {

    private function testing($x)
    {
        // do something
        $this->privateMethod();
    }

    private function privateMethod($number) {
        // do something
    }

}

调用testing(),我使用:

$reflection = new \ReflectionClass('A');
$method = $reflection->getmethod('testing');
$method->setAccessible(TRUE);

$object = new A();
$parameters = array();
$result = $method->invokeArgs($object, $parameters);

但我不知道如何模拟privateMethod().我只想测试testing()方法中的代码.我想指出我想要privateMethod()返回结果而不需要调用实际方法.

解决方法:

如果您可以将private更改为protected,则可以使用部分模拟.

$object = $this->getMockBuilder('A')
    ->setMethods(array('privateMethod'))
    ->getMock();
$object->expects($this->any())
    ->method('privateMethod')
    ->will($this->returnValue($x));

这将仅替换setMethods数组中的方法的实现,并且所有其他方法将执行原始代码.然而,这对私有方法不起作用,因为模拟对象扩展了原始方法;但它不能覆盖私人.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐