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自带)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

页面开发感想

页面开发 1、 前端预览 2、一些思路 2.1、首页自定义element-plus的走马灯 :deep(.el-carousel__arrow){border-radius: 0%;height: 10vh; }需要使用:deep(标签)才能修改样式 或者 ::v-deep 标签 2.2、整体设计思路 <template><div class"card" style&…

【ChatBI】text2sql-不需要访问数据表-超轻量Python库Vanna快速上手,对接oneapi

oneapi 准备 首先确保你有oneapi &#xff0c;然后申请 kimi的api 需要去Moonshot AI - 开放平台 然后添加一个api key 然后打开oneapi的渠道界面&#xff0c;添加kimi。 然后点击 测试&#xff0c; 如果能生成响应时间&#xff0c;就是配置正确。 然后创建令牌 http:…

Vllm Offline 启动

Vllm Offline 启动 Vllm Offline 启动&#xff0c;设置环境变量&#xff0c; TRANSFORMERS_OFFLINE1reference: https://github.com/vllm-project/vllm/discussions/1405

Linux shell编程学习笔记60:touch命令

0 前言 在csdn技能树Linux入门的练习题中&#xff0c;touch是最常见的一条命令。这次我们就来研究它的用法。 1 touch命令的功能、格式和选项说明 我们可以使用touch --help命令查看touch命令的帮助信息。 [purpleendurer bash ~ ]touch --help Usage: touch [OPTION]... …

MATLAB-NGO-CNN-SVM,基于NGO苍鹰优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

NGO-CNN-SVM&#xff0c;基于NGO苍鹰优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行程序。 2.所有程序都经过验证&#xff0c;保证程序可以运行。 3.具有良好的编程习惯&#xff0c;程序均…

【Android面试八股文】Activity A跳转B,B跳转C,A不能直接跳转到C,A如何传递消息给C?

文章目录 1. 使用Intent传递消息2. 使用全局单例类(Singleton)3. 使用静态变量4. 使用Application全局静态变量5. 使用 Android系统剪切板(Clipboard)6. 本地化存储方式6.1 使用SharedPreferences6.2 使用File文件存储方式传递消息6.3 使用SQLite数据库方式传递消息7. 使用广…

【Spring Boot】Java 的数据库连接模板:JDBCTemplate

Java 的数据库连接模板&#xff1a;JDBCTemplate 1.JDBCTemplate 初识1.1 JDBC1.2 JDBCTemplate 2.JDBCTemplate 实现数据的增加、删除、修改和查询2.1 配置基础依赖2.2 新建实体类2.3 操作数据2.3.1 创建数据表2.3.2 添加数据2.3.3 查询数据2.3.4 查询所有记录2.3.5 修改数据2…

【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 运行

isarsoft / yolov4-triton-tensorrt运行发现插件未注册? 【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4 对main 进行了重新构建 【ai】tx2 nx :ubuntu查找NvInfer.h 路径及哪个包、查找符号【ai】tx2…

深度学习实战81-基于大模型的Chatlaw法律问答中的知识图谱融合思路,数据集说明、以及知识图谱对ChatLaw的影响介绍

大家好,我是微学AI,今天给大家介绍一下深度学习实战81-基于大模型的Chatlaw法律问答中的知识图谱融合思路,数据集说明、以及知识图谱对ChatLaw的影响介绍。基于大模型的Chatlaw法律问答系统融合了知识图谱,以提高法律咨询服务的可靠性和准确性。Chatlaw通过结合知识图谱与人…

AES加密算法及AES-CMAC原理白话版系统解析

本文框架 前言1. AES加密理论1.1 不同AES算法区别1.2 加密过程介绍1.2.1 加密模式和填充方案选择1.2.2 密钥扩展1.2.3分组处理1.2.4多轮加密1.2.4.1字节替换1.2.4.2行移位1.2.4.3列混淆1.2.4.4轮密钥加1.3 加密模式1.3.1ECB模式1.3.2CBC模式1.3.3CTR模式1.3.4CFB模式1.3.5 OFB模…

redis 单节点数据如何平滑迁移到集群中

目的 如何把一个redis单节点的数据迁移到 redis集群中 方案&#xff1a; 使用命令redis-cli --cluster import 导入数据至集群 --cluster-from <arg>--cluster-from-user <arg> 数据源用户--cluster-from-pass <arg> 数据源密码--cluster-from-askpass--c…

css_22_过渡动画

一.过渡 transition-property 作用&#xff1a;定义哪个属性需要过渡。结构&#xff1a; transition-property: all; 常用值&#xff1a; 1.none&#xff1a;不过渡任何属性。 2.all&#xff1a;过渡所有能过渡的属性。 3&#xff0e;具体某个属性名&#xff0c;例如&#xf…

驾校预约小程序系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学员管理&#xff0c;教练管理&#xff0c;驾校信息管理&#xff0c;驾校车辆管理&#xff0c;教练预约管理&#xff0c;考试信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;驾校信息&a…

Java基础——五、继承

五、继承 简要 1、说明 继承(Inheritance)是面向对象编程(OOP)的一个核心概念&#xff0c;它允许一个类(子类)继承另一个类(父类)的属性和方法&#xff0c;从而实现代码重用和结构化组织。通过继承&#xff0c;子类可以扩展父类的功能或者对父类的方法进行重写。 父类(超类…

基于docker安装redis服务

Redis是我们在项目中经常需要使用的缓存数据库&#xff0c;安装redis的方式也有很多&#xff0c;本文主要是给大家讲解如何基于docker进行redis服务的安装&#xff0c;主要介绍&#xff0c;如何拉取redis镜像、如何挂载redis的数据以及使用redis的配置文件和开启认证等功能&…

steam社区载入失败、加载不出来、打不开?

随着steam夏季大促的到来&#xff0c;最近steam在线用户越来越多了&#xff0c;很多玩家在自己喜欢的游戏社区里看最新的玩法、攻略和玩家的游戏心得。不过有不少玩家表示有时候会打不开游戏社区或是社区加载失败等问题。根据大家遇到的问题&#xff0c;这里总结了几种解决方法…

构建现代医疗:互联网医院系统源码与电子处方小程序开发教学

本篇文章&#xff0c;笔者将探讨互联网医院系统的源码结构和电子处方小程序的开发&#xff0c;帮助读者更好地理解和掌握这些前沿技术。 一、互联网医院系统源码结构 互联网医院系统通常由多个模块组成&#xff0c;每个模块负责不同的功能。以下是一个典型的互联网医院系统的主…

基于C语言的Jacobi迭代和Gauss-Seidel迭代的方程组求解实现

文章目录 Jacobi迭代方法介绍Gauss-Seidel迭代方法介绍具体代码实现示例题目实现效果 Jacobi迭代方法介绍 Jacobi迭代法是一种简单的迭代求解方法&#xff0c;适用于严格对角占优矩阵。其基本思想是利用当前迭代步的已知解来更新下一个迭代步的解。在C语言实现中&#xff0c;我…

商协会小程序如何提升商协会形象?

商协会小程序在提升商协会形象方面扮演着重要角色。以下是关于商协会小程序如何提升商协会形象的一些场景分析&#xff1a; 1、数字化名片与品牌形象展示 小程序可以作为商协会的数字名片&#xff0c;通过展示商会文化、活动信息和会员服务&#xff0c;有效提升商会的品牌形象…

链表反转的两种方式

链表反转的两种方式 1.头插法 先创建一个新的链表&#xff0c;然后不断遍历我们想要反转的链表&#xff0c;再一个一个使用头插法插入到我们新建立的链表中&#xff0c;这样链表就倒置了。 LinkList Reverse(LinkList re) {LinkList n;n (LinkList)malloc(sizeof(LNode));n…