用PHPUnit模拟私有方法

我有一个关于使用PHPUnit模拟类中的私有方法的问题。让我举一个例子:


class A {

  public function b() { 

    // some code

    $this->c(); 

    // some more code

  }


  private function c(){ 

    // some code

  }

}

我如何存根private方法的结果以测试public函数的更多代码部分。



侃侃尔雅
浏览 422回答 3
3回答

繁华开满天机

您可以测试私有方法, 但不能模拟(模拟)此方法的运行。此外,反射不允许您将私有方法转换为受保护的方法或公共方法。setAccessible仅允许您调用原始方法。另外,您可以使用runkit重命名私有方法并包括“新实现”。但是,这些功能是实验性的,不建议使用它们。

汪汪一只猫

您可以使用反射,并setAccessible()在测试中允许您设置对象的内部状态,以使其返回私有方法所需的内容。您需要使用PHP 5.3.2。$fixture = new MyClass(...);$reflector = new ReflectionProperty('MyClass', 'myPrivateProperty');$reflector->setAccessible(true);$reflector->setValue($fixture, 'value');// test $fixture ...
打开App,查看更多内容
随时随地看视频慕课网APP