测试private methods
Junit FAQ
How do I test private methods?

Testing private methods may be an indication that those methods should be moved into another class to promote reusability.

But if you must...

If you are using JDK 1.3 or higher, you can use reflection to subvert the access control mechanism with the aid of the PrivilegedAccessor. For details on how to use it, read this article.
以下给出一个例子:
package
junit;

import
java.lang.reflect.
*
;

class
Sup
{
public int data;
}

public
class
Unit3
extends
Sup
{
private int data;

public Unit3() {
this(0);
}

public Unit3(int data) {
this.data = data;
}

private int getData() {
return this.data;
}
private int getData2(int i){ //with paramater
return this.data + i;
}
}
测试类
package
junit;

import
org.junit.
*
;
import
java.lang.reflect.
*
;

public
class
Unit3Test
{
private Unit3 c = new Unit3(10);
private final Method methods[] = Unit3.class.getDeclaredMethods();
@Test
public void testGetData() throws Exception{
for(int i = 0 ; i<methods.length; ++i){
if(methods[i].getName().equals("getData")){
methods[i].setAccessible(true);
Object o = methods[i].invoke(c);
Assert.assertEquals(new Integer(10), o);
}
}
}
@Test
public void testGetData2() throws Exception{
for(int i = 0 ; i<methods.length; ++i){
if(methods[i].getName().equals("getData2")){//找到要测试的private method
methods[i].setAccessible(true); //设置可以访问
Object para[] = {123}; //参数列表
Object o = methods[i].invoke(c,para); //相当于c.privateMethod(para)
Assert.assertEquals(new Integer(10+123), o);//测试
}
}
}
}
测试结果
Junit FAQ








以下给出一个例子:




























测试类

































测试结果
