通过反射技术测试一个类的private方法
新建一个简单的待测试类
package com.erquan.son;
public class PrivateMethod {
//私有方法
private int add(int a, int b) {
return a + b;
}
}
|
新建测试类
package com.erquan.son;
import static org.junit.Assert.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class PrivateMethodTest {
@Test
public void testAdd() {
try {
PrivateMethod privateMethod = new PrivateMethod();
Class clazz = PrivateMethod.class; //通过反射技术获取类
Method method = null;
try {
method = clazz
.getDeclaredMethod("add", int.class, int.class); //获取类的方法,参数1为要获取的方法名字, 后面的参数为方法的参数
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
}
method.setAccessible(true); //设置访问方法的权限,解除private属性的限制
Object result = null;
try {
result = method.invoke(privateMethod, new Object[] {20, 40});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
assertEquals(60, result); //断言方法是否正确
} catch (SecurityException e) {
e.printStackTrace();
}
}
}
|
版权声明:本文为博主原创文章,未经博主允许不得转载。