JAVA高级进阶13单元测试、反射、注解

第十三天、单元测试、反射、注解

单元测试

介绍

单元测试

  • 就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试

咱们之前是如何进行单元测试的? 有啥问题 ?

  • 只能在main方法编写测试代码,去调用其他方法进行测试。

  • 无法实现自动化测试,一个方法测试失败,可能影响其他方法的测试。

  • 无法得到测试的报告,需要程序员自己去观察测试是否成功。

Junit单元测试框架

  • 可以用来对方法进行测试,它是由Junit公司开源出来的

优点

  • 可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立。

  • 不需要程序员去分析测试的结果,会自动生成测试报告出来。

Junit框架快捷入门

步骤 : Junit单元测试-快速入门

需求

  • 某个系统,有多个业务方法,请使用Junit单元测试框架,编写测试代码,完成对这些方法的正确性测试。

具体步骤

  • 将Junit框架的jar包导入到项目中

  • 为需要测试的业务类,定义对应的测试类,并为每个业务方法,编写对应的测试方法(必须:公共、无参、无返回值)

  • 测试方法上必须声明@Test注解,然后在测试方法中,编写代码调用被测试的业务方法进行测试

  • 开始测试:选中测试方法,右键选择“JUnit运行” ,如果测试通过则是绿色;如果测试失败,则是红色

Junit框架的常见注解

Junit单元测试框架的常用注解(Junit 4.xxxx版本)

  • 在测试方法执行前执行的方法,常用于:初始化资源。

  • 在测试方法执行完后再执行的方法,常用于:释放资源。

Junit单元测试框架的常用注解(Junit 5.xxxx版本)

  • 开始执行的方法:初始化资源

  • 执行完之后的方法:释放资源

反射

认识反射、获取类

反射(Reflection)

  • 反射就是:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)。

反射学什么

反射第一步:加载类,获取类的字节码:Class对象

获取Class对象的三种方式

  • 直接使用类名.class获取:Class c1 = 类名.class

  • 调用Class提供的方法:Class c2 = Class.forName("全类名")

  • 调用Object提供的方法:Class c3 = 对象.getClass()

获取类的构造器

获取类的构造器、并对其进行操作

  • Class提供了从类中获取构造器的方法。

获取类构造器的作用:依然是初始化对象返回

获取类的成员变量

获取类的成员变量

  • Class提供了从类中获取成员变量的方法。

获取到成员变量的作用:依然是赋值、取值

获取类的成员方法

获取类的成员方法

  • Class提供了从类中获取成员方法的API。

成员方法的作用:依然是执行

作用、应用场景

反射的作用?

  • 基本作用:可以得到一个类的全部成分然后操作。

  • 可以破坏封装性。

  • 最重要的用途是:适合做Java的框架,基本上,主流的框架都会基于反射设计出一些通用的功能。

注解

快速入门

注解(Annotation)

  • 就是Java代码里的特殊标记,比如:@Override、@Test等

  • 这些标记会被特定的注解解析器所发现,进而决定应该怎样去编译或者执行被注解标记出来的程序

自定义注解格式

  • //元注解
    public @interface 注解名称 {
    }
    注解本质是一个接口,Java中所有注解都是继承了Annotation接口的。

元注解

  • 指的是:修饰注解的注解,可以指定注解的标注位置和保留阶段

  • @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface Test {
    }

注解解析

什么是注解的解析?

  • 就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来。

如何解析注解?

  • 指导思想:要解析谁上面的注解,就应该先拿到谁

  • 比如要解析类上面的注解,则应该先获取该类的Class对象,再通过Class对象解析其上面的注解

  • 比如要解析成员方法上的注解,则应该获取到该成员方法的Method对象,再通过Method对象解析其上面的注解

  • Class 、 Method 、 Field , Constructor、都实现了AnnotatedElement接口,它们都拥有解析注解的能力

注解属性

注解属性

  • 在定义注解的时候,还可以通过属性来进一步描述注解的细节

  • public @interface 注解名称 {
    public 属性类型 属性名() default 默认值 ;
    }

特殊属性名: value

  • 如果注解中只有一个value属性,使用注解时,value名称可以不写!!

Lombok

lombok

  • Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。

注意事项

  • Lombok会在编译时,自动生成对应的java代码。我们使用lombok时,还需要安装一个lombok的插件(idea自带)。

  • 36
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值