JUnit4原型

实现过程很简单,以下说下步骤:

1.编写runTest()方法,需要传入测试类全名。

2.编写注解,这里需要注意,一定要制定生命周期为runtime。否则用反射查找(运行时)会找不到注解。

3.实现runTest()方法,反射动态加载类,动态创建对象,动态执行标记注解的方法。(如果要执行私有方法需要赋予权限)


示意图:


代码实现如下:

public class JUnitPrototype {
	/**
	 * 给定类的全名,执行该类中@Test注解标记的无参方法(含私有方法)
	 * @param className
	 * @throws Exception
	 */
	public static void runTest(String className)throws Exception{
		Class clazz = Class.forName(className);
		for(Method m : clazz.getDeclaredMethods()){	
			//如果方法上有@Test注解,则执行该方法
			if(m.getAnnotation(Test.class)!=null){
				m.setAccessible(true);//打开私有方法执行权
				m.invoke(clazz.newInstance()); //执行方法
			}
		}
	}
}


注解:

@Retention(RetentionPolicy.RUNTIME)//指定注解的生命周期:运行期
public @interface Test {

}


测试代码:

public class TestClass {
	public static void sayHello(){
		System.out.println("hello!");
	}
	@Test
	private  void sayHi(){
		System.out.println("hi!");
	}
	@Test
	public static void sayGoobdy(){
		System.out.println("goodby!");
	}
	
	
	public static void main(String[] args) throws Exception {
		
		JUnitPrototype.runTest("com.yuer.TestClass");

	}
}


注意的问题:getMethods 与 getDeclaredMethods 的区别

public Method[] getMethods()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法。
public Method[] getDeclaredMethods()对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。

猜你喜欢

转载自blog.csdn.net/chw0629/article/details/80298120