注解案例--简单的测试框架

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: java注解精讲

 目录

一、自定义注解

1.自定义注解源代码

2.元注解

二、定义实用类

1.实用类源代码

三、解析注解

1.解析步骤

2.解析注解源代码

3.测试结果:

四、注解小结


一、自定义注解

1.自定义注解源代码

package cn.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 Check {
}

image.gif

2.元注解

自定义注解@Check

在自定义中用到了

@Retention(RetentionPolicy.RUNTIME)  该注解是表示用到该注解的注解的作用阶段    

样例注解是:   是保存到字节码文件且被JVM读取到。

@Target({ElementType.METHOD})      该注解是表示用到该注解的注解的作用类型

样例注解是:    是表面该注解的注解是作用在方法上的。

二、定义实用类

1.实用类源代码

package cn;
import cn.test.Check;
public class Calculator {
    @Check
    public void add()
    {
        System.out.println("1+0="+(1+0));
    }
    @Check
    public void sub()
    {
        System.out.println("1-0="+(1-0));
    }
    @Check
public void mul(){
    System.out.println("1*0="+(0*1));
}
@Check
public void div()
{
    System.out.println("1/0="+(1/0));
}
public void show()
{
    System.out.println("无bug.........");
}
}

image.gif

给加减乘除四个方法加上了@Check注解(进行编译检查)

三、解析注解

1.解析步骤

       (1)

       创建对象

Calculator c=new Calculator();


       (2)

       获取字节码文件对象

Class<? extends Calculator> aClass = c.getClass();

       (3)

       获取所有方法

Method[] methods = aClass.getMethods();

       (4)

               判断方法上是否有Check注解

               要判断  肯定要遍历

                       定义变量  --出现次数

                       定义IO流   把异常写入文档

2.解析注解源代码

package cn.test;
import cn.Calculator;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;
/*
 *简单的测试框架
 *    解析注解
 * 当主方法执行后 会自动自行被检测的所有方法(加了Check注解的方法),判断方法是否异常
 *
 */
public class TestCheck {
    public static void main(String[] args) throws IOException {
//1.创建对象
        Calculator c=new Calculator();
        //2.获取字节码文件对象
        Class<? extends Calculator> aClass = c.getClass();
        //3.获取所有方法
        Method[] methods = aClass.getMethods();
        //4.判断方法上是否有Check注解
        //要判断  肯定要遍历
        int  number=0;  //出现异常的次数
        BufferedWriter bw=new BufferedWriter(new FileWriter("bug.txt"));
        for (Method method:methods)
        {
            //isAnnotationPresent   方法 判断当前方法  method 对象  有没有指定的注解被加上了  被作用了
            if (method.isAnnotationPresent(Check.class))
            {
//5.有,执行
// 6.捕获异常
                try {
                    method.invoke(c);
                } catch(Exception e){
                    number++;
                    bw.write(method.getName()+"方法异常");
                bw.newLine();
                bw.write("异常名称:"+e.getCause().getClass().getSimpleName());
                bw.newLine();
                bw.write("异常原因:"+e.getCause().getMessage());
                bw.newLine();
                }
            }
            }
        bw.write("本次一个出现"+number+"次异常");
        bw.flush();
        bw.close();
        }
    }

image.gif

3.测试结果:

image.gif编辑

image.gif编辑

四、注解小结

1.以后大多数时候,我们会使用注解,而不是自定义注解

2.注解给谁看:

(1)编译器

(2)给解析程序使用

3.注解不是程序的一部分,可以理解为注解就是一个标签


相关文章
|
6月前
|
Java 编译器
Java注解案例-简单测试框架
Java注解案例-简单测试框架
47 0
|
16天前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
98 2
|
3月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
3月前
|
SQL Java 测试技术
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
SpringBoot单元测试快速写法问题之PorkService 接口中的 getPork 方法的作用如何解决
|
3月前
|
JSON 测试技术 数据格式
单元测试问题之使用JCode5插件生成测试类如何解决
单元测试问题之使用JCode5插件生成测试类如何解决
112 3
|
3月前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之复杂的业务逻辑设计有效的单元测试如何解决
SpringBoot单元测试快速写法问题之复杂的业务逻辑设计有效的单元测试如何解决
|
3月前
|
Java 测试技术 数据库
SpringBoot单元测试快速写法问题之不想在PandoraBoot工程中Mock Dao层如何解决
SpringBoot单元测试快速写法问题之不想在PandoraBoot工程中Mock Dao层如何解决
|
6月前
|
安全 Java 测试技术
Spring Boot 自动化单元测试类的编写过程
企业开发不仅要保障业务层与数据层的功能安全有效,也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的,并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测试呢?答案是可以的,我们可以使用MockMvc来实现它。
101 0
|
11月前
|
Java 测试技术
在SpringBoot单元测试中添加参数
在SpringBoot单元测试中添加参数
82 0
|
Java 测试技术 数据库
SpringBoot - 单元测试利器Mockito入门
SpringBoot - 单元测试利器Mockito入门
629 0