【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )
文章目录
- 一、定义注解
- 二、使用注解
- 三、解析注解
在 【Java 注解】自定义注解 ( 注解属性定义与赋值 ) 博客中讲解了 注解属性 ;
在 【Java 注解】自定义注解 ( 元注解 ) 博客中讲解了注解中的元注解如何描述注解 ;
在 【Java 注解】自定义注解 ( 注解解析 ) 博客中进行了注解的解析 ;
本篇博客实现一个简单的注解测试框架 , 主要进行以下几个步骤的操作 :
定义注解 : 定义用于添加到测试方法上的注解 ;
使用注解 : 在要测试的方法上添加注解 ;
解析注解 : 执行检测主方法 , 自动执行被添加注解的方法 ;
一、定义注解
定义注解 , 只用于标注函数 , 暂时不定义注解属性 ;
使用 元注解 标注 , @Target(ElementType.METHOD)
表示该注解作用于方法上 , @Retention(RetentionPolicy.RUNTIME)
表示保留到运行时 ;
package test;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 Test {}
二、使用注解
在 Function 类中 , 定义若干方法 , 在需要测试的方法上添加 @Test 注解 ;
package test;public class Function {@Testpublic void fun1(){System.out.println("fun1");}@Testpublic void fun2() throws Exception {System.out.println("fun2");throw new Exception("出现异常");}private void fun3(){System.out.println("fun3");}
}
三、解析注解
首先 , 创建要测试的对象 , 之后的 获取注解 , 解析注解 , 反射并方法 , 都是基于该对象的 ;
// 1. 创建要测试的对象
Function function = new Function();
然后 , 获取该 Function 对象的字节码对象 , 获取 Function 对象中所有方法 ;
// 2. 获取该测试对象的字节码对象
// 哪个类上添加了注解 , 就获取哪个类的字节码文件
Class clazz = function.getClass();// 3. 获取 Function 中所有方法
Method[] methods = clazz.getMethods();
最后 , 遍历该方法数组 Method[] methods , 检查每个方法上是否有注解 , 如果有就执行该方法 ;
// 4. 遍历方法 , 检查方法是否有注解, 如果有就执行该方法
for (Method method : methods){// 判断该方法上是否有 Test 注解boolean isTest = method.isAnnotationPresent(Test.class);// 如果有注解, 那么执行该方法if (isTest){try {// 设置可见性, 防止私有方法访问不到method.setAccessible(true);method.invoke(function);} catch (Exception e) {// 出现异常将其打印出来即可e.printStackTrace();}finally {System.out.println(method.toString() + "测试完毕");}}
}
完整代码示例 :
package test;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class Main {public static void main(String[] args) {// 1. 创建要测试的对象Function function = new Function();// 2. 获取该测试对象的字节码对象// 哪个类上添加了注解 , 就获取哪个类的字节码文件Class clazz = function.getClass();// 3. 获取 Function 中所有方法Method[] methods = clazz.getMethods();// 4. 遍历方法 , 检查方法是否有注解, 如果有就执行该方法for (Method method : methods){// 判断该方法上是否有 Test 注解boolean isTest = method.isAnnotationPresent(Test.class);// 如果有注解, 那么执行该方法if (isTest){try {// 设置可见性, 防止私有方法访问不到method.setAccessible(true);method.invoke(function);} catch (Exception e) {// 出现异常将其打印出来即可e.printStackTrace();}finally {System.out.println(method.toString() + "测试完毕");}}}}
}
执行结果 :
【Java 注解】自定义注解 ( 使用注解实现简单测试框架 )相关推荐
- 自动化测试--实现一套完全解耦的简单测试框架
selenium中有提供pageObject,支持将页面元素和动作单独封装到一个类中. 但是,当页面元素发生变化的时候(在项目的维护过程中,很很容易发生的),就需要去修改源代码.为了解决这个问题,可以 ...
- Java注解案例-简单测试框架
目录 一.需求 Calculator类: Check注解: TestCheck类: 二.运行结果 控制台: 记录异常的文件(bug.txt): 三.结论 一.需求 需求:当主方法执行后,会自动执行被检 ...
- JAVA 程序员需要用到 10 个测试框架和库
关于 Java 程序员今年应该学习什么,例如编程语言,库和框架等,如果只能学习或提高其中一项,那必然是自动化测试技能. 测试是专业程序员区别于业余程序员的一项指标,作为专业程序员,并非必须采用 TDD ...
- Java运用注解反射编写简单测试框架
测试一个计算器类,把异常类型次数其他异常信息自动生成BUG文件 /*** 计算器类*/ public class Calculator {//加法@Checkpublic void add(){Sys ...
- 自动化测试--实现一套完全解耦的简单测试框架(二)
一:每次运行都需要打开代码工具,如eclipse或者IDE等.为了后面的持续集成,直接使用Maven命令去运行自动化测试,需要引入surfire插件.笔者使用的是2.10版本Surefire和6.9. ...
- Java内功修炼系列:注解(Annotation)
目录 一 注解的定义 二 如何自定义注解 三 元注解 3.1 @Retention 3.2 @Target 3.3 @Documented 3.4 @Inherited 3.5 @Repeatable ...
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
使用Java反射(Reflect).自定义注解(Customer Annotation)生成简单SQL语句 这次给大家介绍一下在Java开发过程中 使用自定义注解开发: 主要知识点: ...
- 简述java在安卓开发中的应用_Java 自定义注解在安卓开发中的简单运用
定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.接口.枚举.字段.方法.局部变量.方法 ...
- 谈谈 Java 中自定义注解及使用场景
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:快给我饭吃 www.jianshu.com/p/a7bedc ...
最新文章
- 阿里达摩院:超大规模图神经网络系统将赋予机器常识
- Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)
- 1018 锤子剪刀布 (20 分)
- 【无线电波】蓝牙Bluetooth来源 原理?有无辐射影响健康 是否安全!?
- 每日一题:leetcode173.二叉搜索树迭代器
- 最全MySQL面试60题和答案
- 122 - Trees on the level(模拟内存池解法)
- 中国水泥板市场趋势报告、技术动态创新及市场预测
- cpoint 两个点距离_Wasserstein距离学习笔记
- 根据身份证获取性别、生日、后六位
- 从街舞导师王一博.fans机舱生日趴,看“线上应援”新形式
- Delphi下实现全屏快速找图找色 四、BitmapData.pas的使用
- 造型时尚的快充移动电源,兼容性确实不错,aigo A10S体验
- 在网页中在线查看文档(doc、docx 、xls 、xlsx、 pdf 、swf )
- Saber 能量激光描边光效插件
- 思思的美食笔记--吃哒【自用---随缘更】
- 声音断续、卡顿问题分析
- 如何理解Liveupdate Administrator (LUA) 下SEP的更新文件
- 手机恢复出厂设置后一直显示无服务器,手机恢复出厂设置后开不了机怎么办【图文教程】...
- 移动互联网带给我们的世界