軟體測試---私有方法的呼叫(Java反射機制)
阿新 • • 發佈:2018-12-16
1.私有構造方法如何例項化類?
public class MSD {
private int a;
private String b;
//無參構造方法
private MSD() {
}
//有參構造方法
private MSD(int a, String b){
this.a = a;
this.b = b;
}
測試類
import static org.junit.Assert.*; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;
//無參構造方法的呼叫
@Test
public void testMSD(){
Class msdClass = MSD.class;
Constructor msdConstructor;
msdConstructor = msdClass.getDeclaredConstructor();
msdConstructor.setAccessible(true);
MSD msd = (MSD) msdConstructor.newInstance();
}
//有參構造方法的呼叫
@Test Class msdClass = MSD.class; Constructor msdConstructor; msdConstructor = msdClass.getDeclaredConstructor(); msdConstructor.setAccessible(true); MSD msd = (MSD) msdConstructor.newInstance(new Object[]{1,"1及此字串為引數值"});
2.私有方法如何呼叫? 私有方法
private static void insertion(int[] a, int lo, int hi, int d) {
for (int i = lo; i <= hi; i++)
for (int j = i; j > lo && a[j] < a[j - 1]; j--)
exch(a, j, j - 1);
}
測試類
@Test // Method insertion = 類名.class.getDeclaredMethod("方法名",引數類); Method insertion = MSD.class.getDeclaredMethod("insertion",int[].class,int.class,int.class); insertion.setAccessible(true); //insertion.invoke(類的例項,引數; insertion.invoke(msd,a,1,6,1);