[java]junit测试private方法

测试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);//测试
            }

        }

    }

}


测试结果
[java]junit测试private方法_第1张图片
 

你可能感兴趣的:(java,c,测试,JUnit,methods)