1 案例说明
- 模拟Junit测试的@Test
2 案例分析
- 模拟Junit测试的注释@Test,首先需要编写自定义注解@MyTest,并添加元注解,保证自定义注解只能修饰方法,且在运行时可以获得。
- 然后编写目标类(测试类),然后给目标方法(测试方法)使用 @MyTest注解,编写三个方法,其中两个加上@MyTest注解。
- 最后编写调用类,使用main方法调用目标类,模拟Junit的运行,只要有@MyTest注释的方法都会运行。
3 案例代码
自定义的MyTest注解:
package com.homework_test.test03;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}
在Test实体类上使用注解:
package com.homework_test.test03;
public class Test {
@MyTest
public void show01() {
System.out.println("show01()方法!!!");
}
// @MyTest
public void show02() {
System.out.println("show02()方法!!!");
}
@MyTest
public void show03() {
System.out.println("show03()方法!!!");
}
}
测试:
package com.homework_test.test03;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class AnnotationTest {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, InvocationTargetException {
//获得Test实体类class对象
Class<Test> testClass = Test.class;
//获取该实体对象(执行方法使用)
Test test = testClass.newInstance();
//获取所有成员方法
Method[] methods = testClass.getMethods();
//遍历方法集合对象并判断
for (Method method : methods) {
//判断method方法是否含有MyTest注解
if(method.isAnnotationPresent(MyTest.class)){
//含有,直接执行方法
method.invoke(test);
}
}
}
}
/*
打印结果:
show01()方法!!!
show03()方法!!!
*/