文章目录

  • 一、定义注解
  • 二、使用注解
  • 三、解析注解

在 【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 注解】自定义注解 ( 使用注解实现简单测试框架 )相关推荐

  1. 自动化测试--实现一套完全解耦的简单测试框架

    selenium中有提供pageObject,支持将页面元素和动作单独封装到一个类中. 但是,当页面元素发生变化的时候(在项目的维护过程中,很很容易发生的),就需要去修改源代码.为了解决这个问题,可以 ...

  2. Java注解案例-简单测试框架

    目录 一.需求 Calculator类: Check注解: TestCheck类: 二.运行结果 控制台: 记录异常的文件(bug.txt): 三.结论 一.需求 需求:当主方法执行后,会自动执行被检 ...

  3. JAVA 程序员需要用到 10 个测试框架和库

    关于 Java 程序员今年应该学习什么,例如编程语言,库和框架等,如果只能学习或提高其中一项,那必然是自动化测试技能. 测试是专业程序员区别于业余程序员的一项指标,作为专业程序员,并非必须采用 TDD ...

  4. Java运用注解反射编写简单测试框架

    测试一个计算器类,把异常类型次数其他异常信息自动生成BUG文件 /*** 计算器类*/ public class Calculator {//加法@Checkpublic void add(){Sys ...

  5. 自动化测试--实现一套完全解耦的简单测试框架(二)

    一:每次运行都需要打开代码工具,如eclipse或者IDE等.为了后面的持续集成,直接使用Maven命令去运行自动化测试,需要引入surfire插件.笔者使用的是2.10版本Surefire和6.9. ...

  6. Java内功修炼系列:注解(Annotation)

    目录 一 注解的定义 二 如何自定义注解 三 元注解 3.1 @Retention 3.2 @Target 3.3 @Documented 3.4 @Inherited 3.5 @Repeatable ...

  7. 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句

    使用Java反射(Reflect).自定义注解(Customer Annotation)生成简单SQL语句 这次给大家介绍一下在Java开发过程中 使用自定义注解开发: 主要知识点:          ...

  8. 简述java在安卓开发中的应用_Java 自定义注解在安卓开发中的简单运用

    定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.接口.枚举.字段.方法.局部变量.方法 ...

  9. 谈谈 Java 中自定义注解及使用场景

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:快给我饭吃 www.jianshu.com/p/a7bedc ...

最新文章

  1. 阿里达摩院:超大规模图神经网络系统将赋予机器常识
  2. Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)
  3. 1018 锤子剪刀布 (20 分)
  4. 【无线电波】蓝牙Bluetooth来源 原理?有无辐射影响健康 是否安全!?
  5. 每日一题:leetcode173.二叉搜索树迭代器
  6. 最全MySQL面试60题和答案
  7. 122 - Trees on the level(模拟内存池解法)
  8. 中国水泥板市场趋势报告、技术动态创新及市场预测
  9. cpoint 两个点距离_Wasserstein距离学习笔记
  10. 根据身份证获取性别、生日、后六位
  11. 从街舞导师王一博.fans机舱生日趴,看“线上应援”新形式
  12. Delphi下实现全屏快速找图找色 四、BitmapData.pas的使用
  13. 造型时尚的快充移动电源,兼容性确实不错,aigo A10S体验
  14. 在网页中在线查看文档(doc、docx 、xls 、xlsx、 pdf 、swf )
  15. Saber 能量激光描边光效插件
  16. 思思的美食笔记--吃哒【自用---随缘更】
  17. 声音断续、卡顿问题分析
  18. 如何理解Liveupdate Administrator (LUA) 下SEP的更新文件
  19. 手机恢复出厂设置后一直显示无服务器,手机恢复出厂设置后开不了机怎么办【图文教程】...
  20. 移动互联网带给我们的世界

热门文章

  1. Lua学习笔记(2)
  2. Java开源——常见J2EE框架简介
  3. [Ubuntu] 如何在Ubuntu11.04将PHP5.3降级到PHP5.2
  4. 只能是数字、字母、-和_
  5. 实践周java基础软件开发app之五子棋
  6. 历届试题 大臣的旅费 树形DP
  7. Flex前端与Java服务端交互,反射机制挑大旗
  8. Apache中抑制IP段,在httpd.conf中的写法
  9. MongoDB的基本用法
  10. C/C++内存管理详解