JAVA自定义@Test注解

这段时间软件测试的老师刚好教到了JUnit部分,要求做一个简单的JUnit测试案例,所以顺便做了个@MyTest的小案例,算作是回顾知识。

首先是一个空的注解类MyTest.java  :

package com.iceflame.mytest;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;


@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {

}

然后是一个util类,里面的方法加上@MyTest注解

package com.iceflame.mytest;

public class StringUtil {
	
	
	@MyTest
	public void print()
	{
		System.out.println("print()方法执行了");
	}

}

最后是核心运行类,coreRunner.java(主要是用反射的思想,取出加了注解的方法并执行)

package com.iceflame.mytest;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class CoreRunner {
	
	public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, ClassNotFoundException {
//		Class clazz=Class.forName("com.iceflame.mytest.StringUtil");
		Class clazz=StringUtil.class;
		Method [] methods=clazz.getMethods();
		for(Method m:methods)
		{
			
			if(m.isAnnotationPresent(MyTest.class))
			{
				m.invoke(clazz.newInstance(),null);
			}
		}
	}

}

需要注意的是,m.invoke(***,null) 这里的null是参数,也就是方法执行的参数,我们这里利用反射是不知道参数的,所以也能解释为什么我们用@Test的时候,加注解的方法一般都没有参数,因为方法是静态的,而参数是动态的,在运行的时候传过来,我们现在只是利用反射,反向实例化一个类,然后执行里面的某一个无参方法。


猜你喜欢

转载自blog.csdn.net/qq_34525938/article/details/80036260
今日推荐