这段时间软件测试的老师刚好教到了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的时候,加注解的方法一般都没有参数,因为方法是静态的,而参数是动态的,在运行的时候传过来,我们现在只是利用反射,反向实例化一个类,然后执行里面的某一个无参方法。
版权声明:本文为qq_34525938原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。