您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
1-18_注解_案例_简单的测试框架
发布时间:2022-07-09 18:14:38编辑:雪饮阅读()
上篇自定义注解元注解的解析及使用都已经了解了,那么一般具体的应用场合呢?
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//因为我们要检查Calculator类上面的方法,所以这里设置Target范围为Method级别
@Target(ElementType.METHOD)
//阶段策略为运行时(一般都是这个RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.RUNTIME)
public @interface Check {
}
别看一个个加于方法上的方法级别的注解比较麻烦,这也只是在添加过程麻烦,添加好了后,测试就是一键测试咯。 最后执行的结果则如:
public class Calculator {
@Check
public void add(){
System.out.println("1+0="+(1+0));
}
@Check
public void sub(){
System.out.println("1-0="+(1-0));
}
@Check
public void mul(){
System.out.println("1*0="+(1*0));
}
@Check
public void div(){
System.out.println("1/0="+(1/0));
}
//这里没有加上Check注解,所以这里接下来我们的测试脚步中要写代码用关键方法isAnnotationPresent将其排除掉,不检查它的执行是否有异常
public void show(){
System.out.println("永远没有bug");
}
}
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;
public class TestCalculator {
public static void main(String[] args) throws IOException {
//拿到Calculator的类的字节码文件
Class cls=Calculator.class;
//拿到Calculator的类的字节码文件中所有public方法(这个类里面本来自己定义的所有方法也就是public修饰)
Method[] ms=cls.getMethods();
//拿到对象实例用于下面批量验证方法执行是否有异常时候的所依赖(invoke)
Calculator cal=new Calculator();
BufferedWriter bfw=new BufferedWriter(new FileWriter("bug.txt"));
int number=0;
for (Method m:ms) {
if(m.isAnnotationPresent(Check.class)){
try{
m.invoke(cal);
}
catch(Exception e){
number++;
bfw.write(m.getName()+"方法出现了异常");
bfw.newLine();
bfw.write("异常名称:"+e.getCause().getClass().getSimpleName());
bfw.newLine();
bfw.write("异常原因:"+e.getCause().getMessage());
bfw.newLine();
bfw.write("-------------------------------------");
bfw.newLine();
}
}
}
bfw.newLine();
bfw.write("共出现了"+number+"个异常");
bfw.flush();
bfw.close();
}
}
异常名称:ArithmeticException
异常原因:/ by zero
-------------------------------------
共出现了1个异常
关键字词:java,注解,测试,反射
上一篇:17_注解_解析注解
下一篇:12_约束_外键约束_级联操作