04.模拟Junit中的@Test

 

TestRunner.java
复制代码
package com.exp.annotation;

import sun.security.jca.GetInstance;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class TestRunner {

    public static void main(String[] args) throws Exception{
        //执行Demo里的两个单元测试的方法

        //1.通过反射来获取方法
        Method[]  methods = Demo.class.getMethods();
        for(Method m : methods ){
            if(m.getName().startsWith("test")){
                //2.通过反射来获取方法上面的注解
                MyTest MyTest = m.getAnnotation(MyTest.class);
                if(MyTest != null){
                    //3.执行注解下面的方法
                    System.out.println(MyTest.name());
                    m.invoke(Demo.class.newInstance());
                }
            }
        }
        // 2.通过反射来获取方法
}
}
复制代码

 

Demo.java

复制代码
package com.exp.annotation;

public class Demo {

    @MyTest(name="zhangsan")
    public void test1(){
        System.out.println("此处运行test1方法..");
}
    @MyTest()
    public void test2(){
        System.out.println("此处运行test2方法..");
    }

    public void test3(){
        System.out.println("此处运行test3方法..");
    }
}
复制代码

 

MyTest.java
复制代码
package com.exp.annotation;

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

//注解的策略,让它保留在运行的时候   -> 注解生存周期  -> 注解还在字节码上面
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyTest {
    String name() default "exp";
}
复制代码

 

gyf

复制代码
package com.gyf.annotation;

import java.lang.reflect.Method;

/**
 * 注解的工作原理
 * 1.通过反射获取方法
 * 2.通过方法获取方法上面声明的注解对象
 * 3.通过注解对象可以获取注解声明一些参数
 * 4.通过反射来调用方法
 */
public class TestRunner {

    public static void main(String[] args)throws Exception {
        //执行Demo里单元测试两个方法
        //1.通过反射来获取方法
        Method[] methods = Demo.class.getMethods();
        for(Method m : methods){
            if(m.getName().startsWith("test")){//只有以test开头的方法才是单元测试方法
                //2.通过反射来获取方法上面注解
                MyTest myTest = m.getAnnotation(MyTest.class);
                System.out.println(m.getName() + " 是否有MyTest注解:" + myTest);
                if(myTest != null){
                    System.out.println("name=" + myTest.name());
                    //执行注解下面的方法
                    m.invoke(Demo.class.newInstance());
                }
            }
        }


    }
}
复制代码

 

posted @   expworld  阅读(382)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示