1. 程式人生 > >java測試private方法

java測試private方法

當Java的類有一個方法的訪問修飾符是private,我們在寫測試類時該怎樣對它進行測試嗎?道難是先將它的修飾符改成public,然後在做完測試之後再將其改回public,其實完全不用這樣做,我們在編寫測試類的時候只要將其私有方法抽出,讓其可以訪問,就可以按要求進行測試了.

開始我們先寫一個被測試類,如下:

package com.srcopen.test;

publicclass Example{
 
privateint add(int a,int b){
  
return a+b;
 }

 
 
publicint doAdd(int c,int d){
  
returnthis.add(c, d);
 }

}

這個類非常的簡單,它有一個相加的私有方法,進行a+b,然後在一個公有方法doAdd(int,int)中進行呼叫.下面讓我們寫一個簡單的測試類對這個被測試類進行測試,如下:

package com.srcopen.test;
import junit.framework.*;
publicclass Example_Test extends TestCase {
    
publicvoid testDoAdd() {
         Example example
=new Example();
         assertEquals(
4,example.doAdd(1,3
));
    }

}

這對被測類的公有方法進行測試,應該是沒問題的,然後對其私有方法進行測試,我們要想辦法將其私有方法通過程式設計變成私有方法,主要用去Method這個類,將我們要測試的方法賦給它,其中它有一個設定,可使方法變成可進入,這樣就可以達到測試的目的了,編寫的完整程式碼如下:

package com.srcopen.test;
import junit.framework.*;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
publicclass Example_Test 
extends TestCase {
    
publicvoid testDoAdd() {
         Example example
=new Example();
         assertEquals(
4,example.doAdd(1,3));
    }

    
publicvoid testAdd() {
        Example example
=new Example();
        Object o
=null
        
try{
            Method method 
= example.getClass().getDeclaredMethod("add",new Class[] {int.classint.class});
            method.setAccessible(
true);                //讓其方法可訪問
            o = method.invoke(example, new Object[] {13});
        }
catch(Exception e){
            
        }

        assertEquals(
"4",o.toString());
    }

}

注意匯入Method類的時候要為import java.lang.reflect.Method;

還要就是使用method.setAccessible(true)將這個方法設為可以訪問.

執行一下我們發現已經可以進行測試了.~~