我有一个关于使用PHPUnit模拟类中的私有方法的问题。让我举一个例子:class A { public function b() { // some code $this->c(); // some more code } private function c(){ // some code }}我如何存根private方法的结果以测试public函数的更多代码部分。
3 回答
![?](http://img1.sycdn.imooc.com/533e4d00000171e602000200-100-100.jpg)
繁华开满天机
TA贡献1816条经验 获得超4个赞
您可以测试私有方法, 但不能模拟(模拟)此方法的运行。
此外,反射不允许您将私有方法转换为受保护的方法或公共方法。setAccessible仅允许您调用原始方法。
另外,您可以使用runkit重命名私有方法并包括“新实现”。但是,这些功能是实验性的,不建议使用它们。
![?](http://img1.sycdn.imooc.com/5458506b0001de5502200220-100-100.jpg)
汪汪一只猫
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 ...
- 3 回答
- 0 关注
- 449 浏览
添加回答
举报
0/150
提交
取消