java 注解 单元测试

本文介绍了注解的概念,其在程序中的作用,包括`@Override`、`@Deprecated`、`@SuppressWarnings`等常见注解的用途。还涵盖了自定义注解的创建,元注解的作用,以及如何在单元测试中使用注解。通过实例演示获取类方法上的特定注解和元注解的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是注解? 英文是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值