注意到,我們在之前被測試的方法都是共有的...其實(shí)算是protected修飾的方法我們也可以通過在同一個包下面建測試類來測試的.但是,現(xiàn) 在我們有一個需求,是要測試私有的方法....按照我們之前的辦法,創(chuàng)建被測試類的對象顯然已經(jīng)不能實(shí)現(xiàn)了.因?yàn)閷ο蟛荒苷{(diào)用類里面私有的方法...還 有一種解決辦法,是先將這個方法改成public,測試結(jié)束以后再改回private .但是,有一點(diǎn)必須記住.
不能為了測試而修改javascript:;" onClick="javascript:tagshow(event, '源代碼');" target="_self">源代碼,除非是通過測試發(fā)現(xiàn)了BUG
在這里,我們通過反射來解決這個問題...
放上來例子..
被測試?yán)?.簡單的不能再簡單了
package com.test.junit3;
public class calcutate2 {
private int add(int a, int b) {
return a + b;
}
}
測試類
package com.test.junit3;
import org.junit.Assert;
import java.lang.reflect.Method;
import org.junit.Test;
public class privateTest {
@Test
@SuppressWarnings("unchecked")
public void testAdd()
{
calcutate2 cal = new calcutate2();
Class c = calcutate2.class;//獲得class類
try
{
Method method = c.getDeclaredMethod("add", new Class[]{int.class,int.class});//獲得method.注意,這里不能使用getMethod方法,因?yàn)檫@個方法只能獲取public修飾的方法..
method.setAccessible(true);//這個設(shè)置為true.可以無視java的封裝..不設(shè)置這個也無法或者這個Method
Object result = method.invoke(cal, new Object[]{1,10});
Assert.assertEquals(11, result);//這里自定拆箱..
}
catch (Exception e)
{
e.printStackTrace();
}
}
}