注解_案例_简单的测试框架
* 案例:简单的测试框架
* 小结:
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();}}
注解_案例_简单的测试框架相关推荐
- mysql可以使用mybaties框架吗_搭建一个简单的mybatis框架
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- VBS 请求WebAPI接口_从零开始实现简单的webapi框架【Golang 入门系列十一】
之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...
- java springmvc 数据库事务_事务的简单回顾_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...
SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...
- java移动端接口测试_走进Java接口测试之测试框架TestNG数据驱动(入门篇)
前言 我们在前面的文章中,和大家分享过接口自动化测试一些基本的实现方法,但是,你很快就会发现,如果在测试脚本中硬编码测试数据的话,测试脚本灵活性会非常低.而且,对于那些具有重复的请求,而只是测试入参不 ...
- 没有活动混音器设备可用_案例研究:可用性测试混音器
没有活动混音器设备可用 In a previous blog post, "Testing the Audio Mixer", the Audio Mixer was discus ...
- Java注解初体验(简单ORM映射框架)
2019独角兽企业重金招聘Python工程师标准>>> Java学了很久了,始终没有深入学习过注解反射这些高级特性,晚上花时间研究了一下,其实还挺有意思的,貌似也搞清楚了像Hiber ...
- C++提高部分_C++函数模板_案例_数组排序---C++语言工作笔记083
我们再去做一个函数模板的,案例. 利用函数模板,封装一个排序的函数,可以实现不同数据类型的数组排序, 使用选择排序法,进行排序,从大到小... 分别利用char数组,int数组进行测试 我们写一个测试 ...
- python股票价格涨跌幅_案例_如何计算股票复权价格
> <邢不行-2019新版|Python股票量化投资课程> > author:邢不行 > 微信:xingbuxing0807 > ## 本节课讲解如何根据预测者网的 ...
- C++_类和对象_封装_案例_立方体类_案例点和圆的关系---C++语言工作笔记039
最新文章
- How React Works (一)首次渲染
- BZOJ4866 Ynoi2017由乃的商场之旅(莫队)
- Python协程:从yield/send到async/await
- 面试官问:JS的继承
- 笔记本内置扬声器三强PK
- python选取特定行_pandas.DataFrame选取/排除特定行的方法
- bzoj 4001: [TJOI2015]概率论(找规律)
- 一篇个人认为对RNN写的比较好的文章
- cad面积累计lisp怎么用_CAD连续面积标注lisp插件
- 电脑可以上QQ但是打不开网页
- 女孩,请把第一胎留给丈夫!!!
- php写出个人所得税,PHP如何计算个人所得税
- ubuntu 20.04 安装 QQ 和 Wechat 及其卸载, 解决微信不能发图片, 输入框输入中文显示方块问题
- Android Service之bindService
- RANSAC如何动态更新最大迭代次数
- 多旋翼无人机组成(小白上路)
- 计算机组成原理之基本组成
- 浙江特大套路贷案具体经过是什么样?套路贷与普通贷款有什么区别
- hashcat 2.3 后面进行的哈希装载
- yii2高级模板安装和yii migrate的使用
热门文章
- redis数据库各种数据类型的增删改查命令
- structs实现三种action的方法
- hdu 4940 数据太水...
- 浏览器插件-- Browser Helper Object(BHO) 一
- 在JSP页面中使用Ajax主题时的引入
- Angular6错误 Service: No provider for Renderer2
- 001@多用派发队列,少用同步锁
- Aspose.cell生成表格
- scrapy 的三个入门应用场景
- 我的Android进阶之旅------Android中高低API版本兼容使用@TargetApi或者@SuppressLint(NewApi)...