为了账号安全,请及时绑定邮箱和手机立即绑定

用PHPUnit模拟私有方法

用PHPUnit模拟私有方法

PHP
侃侃尔雅 2019-11-28 10:46:55
我有一个关于使用PHPUnit模拟类中的私有方法的问题。让我举一个例子:class A {  public function b() {     // some code    $this->c();     // some more code  }  private function c(){     // some code  }}我如何存根private方法的结果以测试public函数的更多代码部分。
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您可以测试私有方法, 但不能模拟(模拟)此方法的运行。


此外,反射不允许您将私有方法转换为受保护的方法或公共方法。setAccessible仅允许您调用原始方法。


另外,您可以使用runkit重命名私有方法并包括“新实现”。但是,这些功能是实验性的,不建议使用它们。


查看完整回答
反对 回复 2019-11-28
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

您可以使用反射,并setAccessible()在测试中允许您设置对象的内部状态,以使其返回私有方法所需的内容。您需要使用PHP 5.3.2。


$fixture = new MyClass(...);

$reflector = new ReflectionProperty('MyClass', 'myPrivateProperty');

$reflector->setAccessible(true);

$reflector->setValue($fixture, 'value');

// test $fixture ...


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 417 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信