注解学习,简单测试框架
注解
```java
package domin;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ElementType.METHOD})//作用于类
@Retention(RetentionPolicy.RUNTIME)//保留到运行时
public @interface Check {
}
测试框架
package domin;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.FilterWriter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** 测试框架,当主方法被执行,就可以执行所有有chect注解的方法,并判断是否有异常,记录到文件中*/
public class TestCheck {public static void main(String[] args) throws IOException {//1、创建测试对象Person preson = new Person();//2、获取字节码对象Class cls = preson.getClass();//3、获取对象的所有方法Method[] methods = cls.getMethods();int number = 0;//出现异常的次数//定义记录文件流对象BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bug.txt"));//4、遍历所有方法,看是否有@Check注解for(Method method : methods){//5、判断是否有@Check注解if(method.isAnnotationPresent(Check.class)){//6、有,则执行该方法try {method.invoke(preson);} catch (Exception e) {//7、捕获异常//8、记录到文件中number++;bufferedWriter.write(method.getName() + "方法出异常了");bufferedWriter.newLine();bufferedWriter.write("异常的名称是:" + e.getCause().getClass().getSimpleName());bufferedWriter.newLine();bufferedWriter.write("异常的原因是:" + e.getCause().getMessage());bufferedWriter.newLine();bufferedWriter.write("------------------------------");bufferedWriter.newLine();}}}bufferedWriter.write("本次测试共出现" + number + "次异常");bufferedWriter.flush();bufferedWriter.close();}
}
被测试类
package domin;public class Person {@Checkpublic void eat(){Integer a = null;a.equals(1);System.out.println("吃饭啦。。。。");}public void drink(){System.out.println("喝水啦。。。。");}@Checkpublic void think(){System.out.println("思考啦。。。。");}@Checkpublic int calcul(){// System.out.println("思考啦。。。。");return 1/0;}
}