• java 注解 单元测试


    什么是注解? 英文是annotation

    注解的主要作用:对我们的程序进行标注和解释。

    注解名

    说明

    @Override

    描述子类重写父类的方法

    @Deprecated

    描述方法过时

    @SuppressWarnings

    压制警告

    注解和注释的区别

    注释:给程序员看的

    注解:给编译器看的(让虚拟机看到程序中的注解,注解代表程序的一些特殊功能)

    自定义注解

    默认值可以不设置

    在使用注解的时候如果注解里面的属性没有指定默认值

    那么我们就需要手动给出注解属性的设置值

    //特殊属性value 如果我们只设置了value没有默认值,那么在调用注解时,可以省略value字段只给出值value的设置值

    代码:

    主自定义注解:

    public @interface Anno1 {
        //定义一个基本类型的属性
        int a() default 23;
        //定义一个String类型的属性
        public String name() ;
        //定义一个class类似的属性
        public Class clazz() default Anno2.class;
        //定义一个注解类型的属性
        public Anno2 anno() default @Anno2;
        //定义一个枚举类型的属性
        public Season season() default Season.SPRING;
        //以上类型的一维数组
        //int 数组
        public int[] arr()default {1,2,3,4,5};
        //枚举数组
        public Season[] seasons()default {Season.SPRING,Season.SUMMER};
        //特殊属性value 如果我们只设置了value没有默认值,那么在调用注解时,可以省略value字段
    
    }

    Anno2:

    public @interface Anno2 {
    }

    枚举类Season:

    public enum Season {
        SPRING,SUMMER,AUTUMN,WINTER;
    }

    测试类

    @Anno1(name = "libai")
    public class AnnoTest {
    
    }

     

    练习:获取某个类中的所有方法并判断是否有相应注解

    注解类:

    @Retention(value = RetentionPolicy.RUNTIME)
    public @interface Test {
    }
    

    方法类:

    public class UseTest {
        @Test
        public void method(){
            System.out.println("我是method");
        }
    
        public void function(){
            System.out.println("我是function");
        }
        @Test
        public void show(){
            System.out.println("我是show");
        }
    }

    测试类:

    public class AnnoTest {
        public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException {
            //通过反射获取UseTest类的字节码文件对象
            Class clazz = Class.forName("com.myAnnotation.UseTest");
            //创建一个对象
            UseTest useTest = new UseTest();
            //通过反射获取类中所有非继承方法对象
            Method[] methods = clazz.getDeclaredMethods();
            //遍历获得每一个方法对象
            for (Method method : methods) {
                //isAnnotationPresent 判断当前方法上是否有指定的注解
                //参数为注解的字节码文件对象
                //返回值:布尔
                if (method.isAnnotationPresent(Test.class)) {
                    method.invoke(useTest);
                }
            }
        }
    }

    元注解:描述注解的注解

    如:

    @Retention(value = RetentionPolicy.RUNTIME)

    public @interface Test { }

    元注解名

    说明

    @Target

    指定了注解能在哪里使用

    @Retention

    可以理解为保留时间(生命周期)

    @Inherited

    表示修饰的自定义注解可以被子类继承

    @Documented

    表示该自定义注解,会出现在API文档里面。

    @Target ({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})  指定注解在哪使用  分别为 变量, 类, 方法

    @Retention()  如果不写 表示这个注解只能存活在源码阶段

    随意要设置  @Retention(RetentionPolicy.RUNTIME) //让注解活到字节码运行阶段

    @Inherited  直接写,就代表这个注解可以被继承

    单元测试

    以前的测试方式:

    我们都是将代码全部写完才进行测试。这样其实不是很好

    在以后工作的是后,都是写完一部分代码就测试一部分。这样,带码中的问题可以得到及时修复

    也避免了,由于代码过多,从而无法准确定位到错误的代码

    Junit概述

    JUnit是一个开放源代码的测试工具

    提供注解来识别测试方法

    JUnit测试可以让你编写代码更快并能提高质量

    JUnit优雅简介没那么复杂,花费时间较少

    JUnit在一个条中显示进度。如果运行良好则是绿色。运行失败则是红色

    Junit使用的基本流程

    将JUnit的jar包导入到工程中

    编写测试方法测试方法必须是公共的无参数无返回值的非静态方法

    在测试方法上使用@Test注解标注该方法是一个测试方法

    选中测试方法右键通过junit运行该方法\

    单元测试的三个常用注解 before,test,after.flv

  • 相关阅读:
    HTML网页设计结课作业——基于HTML+CSS仿学校官网页面
    MySQL事务,从redo log、bin log、undo log说起...
    紧急避坑!美团一面就凉透?Java+数据库+Linux+缓存+算法+Redis+网络等等看不透的请看这篇!
    c#享元模式详解
    does not export com.sun.tools.javac.util to unnamed moudle
    使用阿里云OSS实现头像上传
    视频文件采用哪种格式占的空间最小
    IB物理应该怎么学?
    Python青少年等级考试实操题(二级)
    android自定义View: 绘制图表(一)
  • 原文地址:https://blog.csdn.net/m0_73859807/article/details/127411691