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()); } } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?