案例:注解综合案例(模拟Junit测试的@Test)

注解综合案例需求:

      模拟Junit测试的@Test实现以下两种情况
      若添加了@Test注解的方法,就可以使用单元测试运行
      若没有添加@Test注解的犯法,就不能使用单元测试运行

分析:

  1. 自定义一个注解@MyTest,给注解添加元注解(只能在方法上使用,运行有效)
  2. 创建一个测试类,在测试类中定义多个方法,让部分方法上使用自定义的注解@MyTest
  3. 使用反射技术获取测试类的class文件对象
  4. 使用class文件对象中的方法newInstance实例化对象
  5. 使用反射技术获取到测试类中所有方法,返回一个Method数组
  6. 遍历Method数组,获取每一个Method方法
  7. 判断获取到的Method方法上是否有指定的注解@MyTest
  8. 如果方法有@MyTest注解,让方法运行

代码实现:

1、自定义一个注解@MyTest,给注解添加元注解(只能在方法上使用,运行有效)

package com.ccc.demo09Annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//1、自定义一个注解@MyTest,给注解添加元注解(只能在方法上使用,运行有效)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}

2、创建一个测试类,在测试类中定义多个方法,让部分方法上使用自定义的注解@MyTest

package com.ccc.demo09Annotation;

//2.创建一个测试类,在测试类中定义多个方法,让部分方法上使用自定义的注解@MyTest
public class DemoMyTest {
    public void test01(){
        System.out.println("test01方法");
    }
    
    @MyTest
    public void test02(){
        System.out.println("test02方法");
    }
    
    public void test03(){
        System.out.println("test03方法");
    }
    
    @MyTest
    public void test04(){
        System.out.println("test04方法");
    }
}

剩余六步

package com.ccc.demo09Annotation;

import java.lang.reflect.Method;

public class Demo01AnnotationTest {
    public static void main(String[] args) throws Exception {
        
        //3.使用反射技术获取测试类的class文件对象
        Class clazz = Class.forName("com.ccc.demo09Annotation.DemoMyTest");
        
        //4.使用class文件对象中的方法newInstance实例化对象
        Object obj = clazz.newInstance();
        
        //5.使用反射技术获取到测试类中所有方法,返回一个Method数组
        Method[] declaredMethods = clazz.getDeclaredMethods();
        
        //6.遍历Method数组,获取每一个Method方法
        for (Method method : declaredMethods) {
            
            //7.判断获取到的Method方法上是否有指定的注解@MyTest
            if(method.isAnnotationPresent(MyTest.class)){
                
                //8.如果方法有@MyTest注解,让方法运行
                method.invoke(obj);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45083975/article/details/91985716