* 案例:简单的测试框架
* 小结:
    1. 以后大多数时候,我们会使用注解,而不是自定义注解
    2. 注解给谁用?
        1. 编译器
        2. 给解析程序用
    3. 注解不是程序的一部分,可以理解为注解就是一个标签

package cn.learn.annotation.demo;/*** 小明定义的计算器类*/
public class Calculator {//加法@Checkpublic void add(){String str = null;str.toString();System.out.println("1 + 0 =" + (1 + 0));}//减法@Checkpublic void sub(){System.out.println("1 - 0 =" + (1 - 0));}//乘法@Checkpublic void mul(){System.out.println("1 * 0 =" + (1 * 0));}//除法@Checkpublic void div(){System.out.println("1 / 0 =" + (1 / 0));}public void show(){System.out.println("永无bug...");}}
package cn.learn.annotation.demo;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Check {
}
package cn.learn.annotation.demo;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** 简单的测试框架** 当主方法执行后,会自动自行被检测的所有方法(加了Check注解的方法),判断方法是否有异常,记录到文件中*/
public class TestCheck {public static void main(String[] args) throws IOException {//1.创建计算器对象Calculator c = new Calculator();//2.获取字节码文件对象Class cls = c.getClass();//3.获取所有方法Method[] methods = cls.getMethods();int number = 0;//出现异常的次数BufferedWriter bw = new BufferedWriter(new FileWriter("bug.txt"));for (Method method : methods) {//4.判断方法上是否有Check注解if(method.isAnnotationPresent(Check.class)){//5.有,执行try {method.invoke(c);} catch (Exception e) {//6.捕获异常//记录到文件中number ++;bw.write(method.getName()+ " 方法出异常了");bw.newLine();bw.write("异常的名称:" + e.getCause().getClass().getSimpleName());bw.newLine();bw.write("异常的原因:"+e.getCause().getMessage());bw.newLine();bw.write("--------------------------");bw.newLine();}}}bw.write("本次测试一共出现 "+number+" 次异常");bw.flush();bw.close();}}

注解_案例_简单的测试框架相关推荐

  1. mysql可以使用mybaties框架吗_搭建一个简单的mybatis框架

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. VBS 请求WebAPI接口_从零开始实现简单的webapi框架【Golang 入门系列十一】

    之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...

  3. java springmvc 数据库事务_事务的简单回顾_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

    SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...

  4. java移动端接口测试_走进Java接口测试之测试框架TestNG数据驱动(入门篇)

    前言 我们在前面的文章中,和大家分享过接口自动化测试一些基本的实现方法,但是,你很快就会发现,如果在测试脚本中硬编码测试数据的话,测试脚本灵活性会非常低.而且,对于那些具有重复的请求,而只是测试入参不 ...

  5. 没有活动混音器设备可用_案例研究:可用性测试混音器

    没有活动混音器设备可用 In a previous blog post, "Testing the Audio Mixer", the Audio Mixer was discus ...

  6. Java注解初体验(简单ORM映射框架)

    2019独角兽企业重金招聘Python工程师标准>>> Java学了很久了,始终没有深入学习过注解反射这些高级特性,晚上花时间研究了一下,其实还挺有意思的,貌似也搞清楚了像Hiber ...

  7. C++提高部分_C++函数模板_案例_数组排序---C++语言工作笔记083

    我们再去做一个函数模板的,案例. 利用函数模板,封装一个排序的函数,可以实现不同数据类型的数组排序, 使用选择排序法,进行排序,从大到小... 分别利用char数组,int数组进行测试 我们写一个测试 ...

  8. python股票价格涨跌幅_案例_如何计算股票复权价格

    > <邢不行-2019新版|Python股票量化投资课程> > author:邢不行 > 微信:xingbuxing0807 > ## 本节课讲解如何根据预测者网的 ...

  9. C++_类和对象_封装_案例_立方体类_案例点和圆的关系---C++语言工作笔记039

最新文章

  1. How React Works (一)首次渲染
  2. BZOJ4866 Ynoi2017由乃的商场之旅(莫队)
  3. Python协程:从yield/send到async/await
  4. 面试官问:JS的继承
  5. 笔记本内置扬声器三强PK
  6. python选取特定行_pandas.DataFrame选取/排除特定行的方法
  7. bzoj 4001: [TJOI2015]概率论(找规律)
  8. 一篇个人认为对RNN写的比较好的文章
  9. cad面积累计lisp怎么用_CAD连续面积标注lisp插件
  10. 电脑可以上QQ但是打不开网页
  11. 女孩,请把第一胎留给丈夫!!!
  12. php写出个人所得税,PHP如何计算个人所得税
  13. ubuntu 20.04 安装 QQ 和 Wechat 及其卸载, 解决微信不能发图片, 输入框输入中文显示方块问题
  14. Android Service之bindService
  15. RANSAC如何动态更新最大迭代次数
  16. 多旋翼无人机组成(小白上路)
  17. 计算机组成原理之基本组成
  18. 浙江特大套路贷案具体经过是什么样?套路贷与普通贷款有什么区别
  19. hashcat 2.3 后面进行的哈希装载
  20. yii2高级模板安装和yii migrate的使用

热门文章

  1. redis数据库各种数据类型的增删改查命令
  2. structs实现三种action的方法
  3. hdu 4940 数据太水...
  4. 浏览器插件-- Browser Helper Object(BHO) 一
  5. 在JSP页面中使用Ajax主题时的引入
  6. Angular6错误 Service: No provider for Renderer2
  7. 001@多用派发队列,少用同步锁
  8. Aspose.cell生成表格
  9. scrapy 的三个入门应用场景
  10. 我的Android进阶之旅------Android中高低API版本兼容使用@TargetApi或者@SuppressLint(NewApi)...