注意到,我们在之前被测试的方法都是共有的...其实算是protected修饰的方法我们也可以通过在同一个包下面建测试类来测试的.但是,现 在我们有一个需求,是要测试私有的方法....按照我们之前的办法,创建被测试类的对象显然已经不能实现了.因为对象不能调用类里面私有的方法...还 有一种解决办法,是先将这个方法改成public,测试结束以后再改回private .但是,有一点必须记住.
不能为了测试而修改javascript:;" onClick="javascript:tagshow(event, '源代码');" target="_self">源代码,除非是通过测试发现了BUG
在这里,我们通过反射来解决这个问题...
放上来例子..
被测试例子..简单的不能再简单了
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方法,因为这个方法只能获取public修饰的方法..
method.setAccessible(true);//这个设置为true.可以无视java的封装..不设置这个也无法或者这个Method
Object result = method.invoke(cal, new Object[]{1,10});
Assert.assertEquals(11, result);//这里自定拆箱..
}
catch (Exception e)
{
e.printStackTrace();
}
}
}