JAVA自定义@Test注解

这篇博客介绍了如何在学习JUnit测试时,创建一个名为@MyTest的自定义注解。通过编写注解类、util方法以及使用反射的coreRunner.java来执行带有@MyTest注解的方法。注意,由于反射机制在执行方法时无法确定参数,因此注解的方法通常不带参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段时间软件测试的老师刚好教到了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的时候,加注解的方法一般都没有参数,因为方法是静态的,而参数是动态的,在运行的时候传过来,我们现在只是利用反射,反向实例化一个类,然后执行里面的某一个无参方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值