Java学习路线:JUnit单元测试

目录

使用JUnit

导入依赖

使用Junit

添加前置/后置操作


当项目十分庞大时,如果想测试一个很小的功能,都要启动整个项目来测试,会很浪费时间。

那能否将某个小功能单独拆出来进行测试呢?

这就是单元测试的作用。而JUnit就是一个常用的单元测试工具

使用JUnit

导入依赖

JUnit版本分为JUnit4和JUnit5,在这里讲解JUnit4版本,今后也会讲解JUnit5

使用导入依赖的方式开启JUnit工具

在JUnit官网:Central Repository: junit/junit/4.13.2

下载JUnit的jar包:

junit-4.13.2.jar

放入文件根目录中,在IDEA中右键添加为库(add to library)即可

注意,如果使用的junit版本是4.11以上,必须要添加hamcrest-core包,配套使用(添加的方法和junit一致)

Maven Repository: org.hamcrest » hamcrest-core » 1.3

使用Junit

使用JUnit的方法非常简单,在想要使用单元测试的方法前添加@Test注解即可

注意,测试方法必须满足以下要求:

  • 必须为public
  • 不能是静态方法
  • 返回值必须为void
  • 必须是没有任何参数的方法

可以看到,添加了注解的方法前增加了一个小绿色按钮:

点击方法前的绿色按钮运行,运行结果如下:

可以看到在控制台的成功输出

如果想一次性执行类中所有的测试用例,可以点击类旁边的两个绿色小箭头。

如果我们想判断测试的结果是否是我们所期望的一个值,可以使用个断言工具类Assert来进行判定

asserEquals()方法可以判断传入的两个参数是否相等,第一个参数为我们期望得到的值,第二个为实际的值,如果期望的值和实际的值不相等,则测试用例会显示失败。

例如在上述代码中,expected的1和actual的2明显不同,这样运行的结果就会变成:

JUnit还提供了很多判定方法,根据比较的类型的不同,可以使用不同的方法,例如这里比较的是int类型的数据,使用assertEquals()方法,如果要比较数组,可以使用assertArrayEquals()方法

assertEquals()方法不仅可以比较基本类型,也可以比较对象等

比如想比较两个student对象,可以这么做:

    @Testpublic void method(){try(SqlSession session = MyBatisUtil.getSession(true)){TestMapper mapper = session.getMapper(TestMapper.class);student s = mapper.getStudentById(1);Assert.assertEquals(new student().setNumber(1).setName("lily").setGender("w"),s);}}

添加前置/后置操作

如果我们想在所有的测试之前进行一些前置(后置)操作,有两种办法:

  1. 在所有的测试用例之前都添加前置(后置)操作
  2. 使用@Before(@After)注解来添加

很明显使用注解是一种更好的方法

@Before
public void before(){System.out.println("before test");
}@Test
public void test1(){System.out.println("test1");
}@Test
public void test2(){System.out.println("test2");
}@After
public void after(){System.out.println("after test");
}

上述代码的输出结果为:

before test

test1

after test

before test

test2

after test

可以看到,在执行test前先执行了before方法,在test后执行了after方法

但是这也有个问题,一般情况下,before(after)方法只需要执行一次,就可以完成所有test前置(后置)操作。而每个test前都执行一次before(after),显得有些赘余。

这个问题将在Junit5中得到解决,后续文章中会进行介绍

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

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

相关文章

RK3568平台(camera篇)车载摄像头串行器和解串器方案

一.串行器和解串器简介 SerDes是Serializer/Deserializer的缩写,即串行器和解串器。由于同轴线的传输延迟几乎可以忽略不计(ns级别),相当于将原来只能短距离传输的高速并行信号(MIPI/I2C/CLK等)的传输距离延长,真正做到高带宽、低延迟、长距离的数据传输。 串行器(Seri…

【A】【Maven项目热部署】将Maven项目热部署到远程tomcat服务器上

将Maven项目热部署到远程tomcat中 文章目录 将Maven项目热部署到远程tomcat中1.解决方案:2.实现3.Tomcat中的Root项目的配置和使用4.在tomcat-user.xml中配置远程服务器tomcat的账户信息5.修改 IP 访问权限6.登录ROOT项目,使用Manager App功能管理tomcat…

Scrum价值观

五大价值观 尊重,勇气,专注,承诺,开放 三大支柱(经验主义的三大支柱) 透明度,检查,适应 三大职责(不是三大角色) 产品负责人,开发人员&#xff0c…

【机器学习】26. 聚类评估方法

聚类评估方法 1. Unsupervised Measure1.1. Method 1: measure cohesion and separationSilhouette coefficient Method 2:Correlation between two similarity matricesMethod 3:Visual Inspection of similarity matrix 2. Supervised measures3. 决定…

线性代数求特征值和特征向量的技巧

考场时间很重要,所以学会方法计算挺重要。 一、求特征值: 大部分题目我们都可以通过矩阵行变化将矩阵的某一行的元素化简成只剩一个值,再按一行展开。这是我们首先应该想的。 但是考场难免会紧张,导致一时半会无法看出&#xf…

Java内存区域

前言 对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C程序开发程序员这样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机&#xf…

“七巨头”(The Magnificent 7)科技公司财报喜忧参半看AI

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

图片分割--UNet

1.网络结构 结构可以分为两部分 左边部分是编码结构,进行特征提取 右边是解码结果,进行特征还原 2.数据集准备 import os.path from torchvision import transforms from torch.utils.data import Dataset from utils import *#数据归一化 transform transforms.Compose([tr…

【论文速读】| RED QUEEN: 保护大语言模型免受隐蔽多轮越狱攻击

基本信息 原文标题:RED QUEEN: Safeguarding Large Language Models against Concealed Multi-Turn Jailbreaking 原文作者:Yifan Jiang, Kriti Aggarwal, Tanmay Laud, Kashif Munir, Jay Pujara, Subhabrata Mukherjee 作者单位:Hippocr…

怎么做才能降低APP用户的卸载率?

常年困扰 App 开发者的始终是一个问题:怎么做才能降低用户卸载率呢? 不要慌,今天这篇文章里,你就会找到解决方案啦。首先请记住: 每个 App 都是有自己独立个性的,所以没有一个通用的公式能让大家套用。 还…

Transformer模型——tokenize分词

tokenize的目标是输出的文本流,切分成一个个子串,每个子串相对有完整的语义,便于学习Embedding表达和后续模型的使用。 tokenize有三种粒度:word / subword / char word:词。对于英文等语言来说,存在着天然…

自动驾驶上市潮中,会诞生下一个“英伟达”吗?

站上科技创新潮头的企业总是备受资本青睐。20世纪开始,从IT到互联网,IBM、英特尔、微软、苹果等各大科技巨头,你方唱罢我登场。 近几年,人工智能成为资本市场新传奇故事的孕育之地。今年10月,英伟达市值首度突破3.5万…

【vue项目中添加告警音频提示音】

一、前提: 由于浏览器限制不能自动触发音频文件播放,所以实现此类功能时,需要添加触发事件,举例如下: 1、页面添加打开告警声音开关按钮 2、首次进入页面时添加交互弹窗提示:是否允许播放音频 以上两种方…

产品结构设计(六):结构设计全过程

参考引用 产品结构设计实例教程 1. ID 图及 PCB 堆叠分析 1.1 产品说明及相关资料 1、新产品开发指令单 2、ID 图 3、产品功能规格书 1.2 ID 图分析 ID(Industrial Design,工业设计)是以工业产品为主要对象,综合运用工学、…

文献阅读记录6-Toward computer-made artificial antibiotics

摘要 将合成生物学和计算生物学的概念结合起来,可能会产生比现有药物更不容易产生耐药性的抗生素,而且还能对抗耐药感染。事实上,计算机引导策略与大规模并行高通量实验方法相结合,代表了抗生素发现的新范式。耐多药微生物引起的…

Manus在虚拟现实仿真模拟中的应用案例分享

Manus虚拟现实手套作为一种高精度的人机交互设备,在仿真模拟领域展现出了巨大的应用潜力。通过提供实时、准确的手指动作捕捉数据,Manus手套为多个行业带来了前所未有的仿真体验,推动了技术发展和应用创新。 技术特点 1. 高精度手指跟踪 Ma…

Vue2——单页应用程序路由的使用

一.单页应用程序与多页应用程序之间的比较 二.单页的应用场景 系统类网站 / 内部网站 / 文档类网站 / 移动端网站 三.路由的介绍 1. 什么是路由 路由是一种映射关系 2. Vue中的路由是什么 路径和组件的映射关系 四.VueRouter的使用 5个基础步骤(固定) …

Windows 下实验视频降噪算法 MeshFlow 详细教程

MeshFlow视频降噪算法 Meshflow 视频降噪算法来自于 2017 年电子科技大学一篇高质量论文。 该论文提出了一个新的运动模型MeshFlow,它是一个空间平滑的稀疏运动场 (spatially smooth sparse motion field),其运动矢量 (motion vectors) 仅在网格顶点 (m…

用Python脚本执行安卓打包任务

这个样例是基于windows系统写的python打包安卓的脚本: 一、配置AndroidStudio下的打包任务 1.在Android项目根目录下的build.gradle文件配置生成Release包的任务: task cleanAll(type: Delete) {delete rootProject.buildDirrootProject.subprojects.e…

专题十七_BFS_BFS解决 FloodFill 算法_BFS 解决最短路问题_多源 BFS_BFS 解决拓扑排序

目录 BFS 一、BFS解决 FloodFill 算法 1. 图像渲染(medium) 解析: 细节问题: 总结: 2. 岛屿数量(medium) 解析: DFS: BFS: 总结: 3. …