大家知道,在javaee各技术里面,注解被广泛的使用。那么注解是如何实现的呢?
额。。下面就给出一个本菜鸟 写的一个 仿制 junit测试单元的一个 灰常简单的myTest注解(本人学僧,第一次写博客,希望大家多提宝贵意见。。)
/**
*
*/
package com.guxiang.test;/**
*
*/
package com.guxiang.test;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
首先自定义一个 myTest注解
/**
* @author guxiang
* @date 2016年12月24日 下午10:22:11
* 自定义的myTest注解
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.ANNOTATION_TYPE})
public @interface MyTest {
long time() default -1;
}
写一个类 用于被myTest注解 实现测试
package com.guxiang.test;
public class SomeDaoImpl {
public void save(){
System.out.println("保存了数据");
}
public void update(){
System.out.println("更新了数据");
}
}
写一个测试类 这个类 引用myTest注解
package com.guxiang.test;
public class SomeDaoImplTest {
private SomeDaoImpl dao= new SomeDaoImpl();
/**
* 测试添加
*/
@MyTest
public void testAdd(){
dao.save();
}
@MyTest
public void testUpdate(){
dao.update();
}
}
最关键的 一步 写一个 myTestRunner类 使用反射实现注解的功能 给注解注入灵魂
/**
*
*/
package com.guxiang.test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author guxiang
* @date 2016年12月24日 下午10:26:07
*/
// 反射注解
public class MyTestRunner {
public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
Class clazz = SomeDaoImplTest.class;
Method[] ms = clazz.getMethods();
for (Method method : ms) {
boolean hasMyTest = method.isAnnotationPresent(MyTest.class);
if (hasMyTest) {
method.invoke(clazz.newInstance(), null);
}
}
}
}
这个测试类仿制了 junit测试单元
执行MyTestRunner 的main方法 后 会在控制台输出以下
保存了数据
更新了数据
于此就得到了 测试那个被测试类的功能。。