PHPUnit测试私有属性和方法
来源:互联网 发布:php 分割数组成字符串 编辑:程序博客网 时间:2024/04/29 13:52
一、测试类中的私有方法:
class Sample{ private $a = 0; private function run() { echo $a; }}
上面只是简单的写了一个类包含,一个私有变量和一个私有方法。对于protected和private方法,由于无法像是用public方法一样直接调用,所以在使用phpunit进行单测的时候,多有不便,特别是当一个类中,对外只提供少量接口,内部使用了大量private方法的情况。
对于protected方法,建议使用继承的方式进行测试,在此就不再赘述。而对于private方法的测试,建议使用php的反射机制来进行。话不多说,上代码:
class testSample(){ $method = new ReflectionMethod('Sample', 'run'); $method->setAccessible(true); //将run方法从private变成类似于public的权限 $method->invoke(new Sample()); //调用run方法}
如果run方法是静态的,如:
private static function run(){ echo 'run is a private static function';}
那么invoke函数还可以这么写:
$method->invoke(null); //只有静态方法可以不必传类的实例化
如果run还需要传参,比如:
private function run($x, $y){ return $x + $y;}
那么,测试代码可以改为:
$method->invokeArgs(new Sample(), array(1, 2)); //array中依次写入要传的参数。执行结果返回3
【注意】:利用反射的方法测试私有方法虽好,但setAccessible函数是php5.3.2版本以后才支持的(>=5.3.2)
二、私有属性的get/set
说完了私有方法,再来看看私有属性,依旧拿Sample类作为例子,想要获取或设置Sample类中的私有属性$a的值可以用如下方法:
public function testPrivateProperty(){ $reflectedClass = new ReflectionClass('Sample'); $reflectedProperty = $reflectedClass->getProperty('a'); $reflectedProperty->setAccessible(true); $reflectedProperty->getValue(); //获取$a的值 $reflectedProperty->setValue(123); //给$a赋值:$a = 123;}
上述方法对静态属性依然有效。
到此,是不是瞬间感觉测试私有方法或属性变得很容易了。
参考文献:
http://php.net/manual/en/class.reflectionmethod.php
http://www.cnblogs.com/liuguanghuiyes/archive/2011/12/02/2272429.html
0 0
- PHPUnit测试私有属性和方法
- JMockit Mock 私有方法和私有属性
- Reflect获取私有属性和私有方法
- Python----伪私有属性和私有方法
- Junit 测试私有方法和私有变量方法
- python对象:访问私有属性和私有方法
- Objective-c - 私有属性和私有方法的应用
- java反射访问私有属性和方法
- 使用反射调用私有属性和方法
- javaScript中私有属性和方法
- js--属性和方法(私有/公有)
- python 类的私有属性和方法
- iOS运行时runtime获取私有属性和强制更改私有属性,以及获取私有方法
- js属性和方法的可见性:私有属性(方法),实例属性(方法),类属性(方法)
- PHPUnit学习笔记(三)测试方法进阶
- PHPUnit测试方法间的依赖关系
- Yaf框架PHPUnit集成测试方法
- junit私有方法测试
- Hadoop中HDFS文件系统的Append/Hflush/Read设计文档(HDFS-265:Revisit append)
- JS判断客户端是否是iOS或者Android
- SELECTOR
- 信息学奥林匹克竞赛-津津的储蓄计划
- php 返回json中文乱码
- PHPUnit测试私有属性和方法
- Java输入输出流详解
- shell脚本中导入mysql数据&&执行mysql语句
- 数据挖掘:K最近邻(KNN)算法的java实现
- 验尸名单:3年死掉406家创业公司 他们是怎么死的?
- hazelcast学习笔记--写在前面
- java 读取ftp文件时特殊字符乱码
- leetcode -- Surrounded Regions -- 典型题。BFS
- 时序分析:串匹配-KMP算法