标题:面试的时候,有时候面试官问:一个类中具体私有方法,请问用什么方法测试?
方法:结合自己的总结,使用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;
}
}