1. 程式人生 > >軟體測試---私有方法的呼叫(Java反射機制)

軟體測試---私有方法的呼叫(Java反射機制)

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);