用java反射机制来测试其他类中的私有方法

来源:互联网 发布:大思英语网络课程转让 编辑:程序博客网 时间:2024/04/29 20:59

标题:面试的时候,有时候面试官问:一个类中具体私有方法,请问用什么方法测试?

方法:结合自己的总结,使用java反射机制来测试

步骤如下:

1.用待测试类person,创建一个实例person

2.传进方法名和参数列表,取得相应的方法

3,。知道是私有方法,根据method实例设置Accessible标记,设置为true表示反射的对象在访问时取消访问权限

<1>.method.getAccessible()返回的值始终是false,就是需要使用对象之前检查权限

<2>.和实体类中方法修饰无关,比如方法名修饰为public,设置setAccessible(false)时也要检查,只是此时检查与否都可以被其他地方引用

如果是private,protected,friendly修饰的方法时,设置setAccessible(false)时就能有它的效果

4.下面的代码将演示java反射机制的使用,用来测试其他类中的私有方法并修改属性值

5.运行之后,将会传进Person类work方法中Stone,有相应的输出,同时修改了username,并输出person,修改了toString方法,输出usename值,具体如下:


import java.lang.reflect.Field;import java.lang.reflect.Method;/** * @author 张乾坤 */public class TestClassUseRefect {public static void main(String[] args) throws Exception{Person person = new Person();//now test the class person's private method//根据指定的方法名、参数类型来取得Person类中的方法Method method = person.getClass().getDeclaredMethod("work", String.class);Field field = person.getClass().getDeclaredField("username");//修改该私有方法的权限method.setAccessible(true);field.setAccessible(true);//测试Person类中的私有方法,对私有变量赋值,method.invoke(person, "Stone");field.set(person, "china");System.out.println(person);}}class Person{private String username;private void work(String str){System.out.println("i can work with:"+str+" normally");}public String toString(){return "this is the person class,and username is :"+username;}}

0 0