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