java測試private方法
阿新 • • 發佈:2018-12-26
當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
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.class, int.class});
method.setAccessible(true); //讓其方法可訪問
o = method.invoke(example, new Object[] {1, 3});
}catch(Exception e){
}
assertEquals("4",o.toString());
}
}
注意匯入Method類的時候要為import java.lang.reflect.Method;
還要就是使用method.setAccessible(true)將這個方法設為可以訪問.
執行一下我們發現已經可以進行測試了.~~