为什么使用Junit单元测试?Junit的详解
Hi I’m Shendi
为什么使用Junit单元测试?Junit的详解
Junit简介
Junit是一个Java语言的单元测试框架。
单元测试是一个对单一实体(类或方法)的测试
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
为什么要用Junit?
在我刚接触到Junit时有这样一个问题,进行测试的话可以使用main函数,那为什么要使用junit?
找不到答案,于是后面的开发我都没有使用到单元测试,但用的人还是非常多的,于是今天准备深入了解一下
总结,有以下几点
- 比main代码少一点
- 断言测试预期结果
- 可单个多个运行,多个共享数据
- 有很多注解,可以在之前…之后运行
主要是比较规范和方便吧,main写完测试完后基本上都直接删掉了,而这个不用
使用
Maven的引入就不列出了(SpringBoot都自带导入),这里列出Eclipse直接配置Junit
Eclipse内点击项目,按Alt+Enter(或右键Properties),选择 Java Build Path,选择Libraries,选择Classpath,点击Add Library

Next

Finish即可
接下来就可以非常简单的进行单元测试了
在想要运行的函数上加上 @Test 注解,鼠标点击函数名,右键 RunAs - Junit Test 即可运行

运行后会在Junit选项卡中显示结果

绿勾代表运行正常,这一次将三个函数都直接运行了
运行单个函数
如果需要运行单个函数可以用鼠标点击函数名,当输入的光标在函数名上时右键运行即可
如果不行的话可以打开 outline 选项卡,window -> Show Views -> Outline

右侧选中需要运行的函数,右键运行即可
Assert类
用来断言测试,基本上都是静态函数
例如有一个函数用来处理xxx,我们知道函数返回1是正确结果,于是可以这样写

上面预期和实际不符,条条是红色的,且 Failure Trace 下面显示了错误信息和行数
assert就是一个if的封装,一般使用,可能有问题用if,不应该有问题的时候用assert
Assert还有很多函数,例如判断是否为true或者false,下面列出一些
- fail([String])
- 代表失败,可以有一参数为错误信息
- assertSame([String],Object expected,Object actual)
- 对象的内存地址是预期的内存地址
- assertNotSame
- 与assertSame相反
- assertEquals([String],Object expected,Object actual)
- 值是预期值
- assertNotEquals
- 与assertEquals相反
注解
除了 @Test 注解之外,还有一些其他的注解,如下
| 注解 | 描述 |
|---|---|
| @Ignore | 被忽略的测试方法,加上之后,不执行此段代码,与其他注解一起使用 |
| @Before | 在每一个标注了 @Test 的函数执行之前执行,(有一个@Test就执行一次) |
| @After | 在每一个标注了 @Test 的函数执行之后执行,(有一个@Test就执行一次) |
| @BeforeClass | 必须是静态函数,所有测试函数执行之前执行(包括Before),只执行一次 |
| @AfterClass | 必须是静态函数,所有测试函数执行之后执行(包括After),只执行一次 |
SpringBoot整合Junit
新建SpringBoot项目时会自带Junit,也可以手动加入依赖
<!-- springboot的测试框架,里面有对junit4的依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
项目会有 src/test/java 文件夹供存放测试文件
在测试类上加上以下注解
- @RunWith(SpringRunner.class)
- @SpringBootTest
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
class DemoApplicationTests {@Autowired DemoControl dc;@Testpublic void test() {System.out.println(dc.test());}}
@RestController
public class DemoControl {public String test() {return "test";}}
单元测试运行即可看到结果

单元测试对事务的影响
如果在使用了@Transactional注解,那么在单元测试中的事务默认回滚。需要在方法上添加 @Rollback(value=false) 才会提交事务。
在测试中,处于对数据库的保护考虑,请使用@Rollback(value=true) 显式的回滚
END
相关文章:
为什么使用Junit单元测试?Junit的详解
Hi I’m Shendi 为什么使用Junit单元测试?Junit的详解 Junit简介 Junit是一个Java语言的单元测试框架。 单元测试是一个对单一实体(类或方法)的测试 JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression test…...
怎么学好嵌入式Linux系统和驱动
嵌入式专业是一门实践性非常强的学科,只有多动手,多实践,多编程,多调试,多看书,多思考才能真正掌握好嵌入式开发技术。 现在很多同学也意识到了学校培养模式和社会需求脱节问题,有一部分同学也先…...
Spring Aware总结
概述 Spring中Aware到底是什么意思? 我们在看Spring源码的时候,经常可以看到xxxAwarexxx的身影,通常我会很疑惑,Aware到底是什么意思呢? 比如图片中这些包含Aware关键字的类或者接口。 我对下面3个类或接口进行了解…...
【RocketMQ】源码详解:Broker端消息刷盘流程
消息刷盘 同步入口:org.apache.rocketmq.store.CommitLog.GroupCommitService 异步入口:org.apache.rocketmq.store.CommitLog.FlushRealTimeService 刷盘有同步和异步两种,在实例化Commitlog的时候,会根据配置创建不同的服务 p…...
编码器SIQ-02FVS3驱动
一.简介 此编码器可以是功能非常强大,可以检测左右转动,和按键按下,所以说这一个编码器可以抵三个按键,而且体积非常小,使用起来比三个按键要高大尚,而且驱动也简单。唯一不足的点就是价格有点小贵6-8元才…...
【2021.9.7】记一次exe手动添加shellcode
【2021.9.7】记一次exe手动添加shellcode 文章目录【2021.9.7】记一次exe手动添加shellcode0.大致思路1.获取MessageBox的真实地址VA2.通过OD在代码段添加shellcode3.dump出数据,设置程序OEP4.测试dump出来的exe5.方法总结测试的exe和添加了shellcode的exe:链接&…...
常用训练tricks,提升你模型的鲁棒性
目录一、对抗训练FGM(Fast Gradient Method): ICLR2017代码实现二、权值平均1.指数移动平均(Exponential Moving Average,EMA)为什么EMA会有效?代码实现2. 随机权值平均(Stochastic Weight Averaging,SWA&a…...
具有精密内部基准的 DACx0502 简介及驱动应用示例
DACx0502 说明 16 位 DAC80502、14 位 DAC70502 和 12 位DAC60502 (DACx0502) 数模转换器 (DAC) 均为具有电压输出的高精度、低功耗器件。 DACx0502 线性度小于 1LSB。凭借高精度和微型封装特性,DACx0502 非常适合以下 应用: 增益和失调电压校准、电流…...
C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp()
C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp() 在了解strncpy、strncat()、前,需要先了解strcpy()、strncat(): C语言函数:字符串函数及模拟实现strlen() 、strcpy()、 strcat()_srhqwe的博客-CSDN博客 strncp…...
学术论文插图要求简介
1. 类型 位图和矢量图是两种不同的图像类型,它们在存储和处理图像时使用不同的方法。以下是它们之间的详细区别: 图像构成方式:位图使用像素(或图像的最小单元)来构建图像,每个像素都有自己的颜色和亮度值。…...
【独家】华为OD机试 - 斗地主 2(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...
力扣-计算特殊奖金
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1873. 计算特殊奖金二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总…...
华为校招机试真题目录
专栏介绍 本专栏将逐步收集历年华为校招算法真题 专栏权益 每篇博客都包含: 算法考点解析(文字+画图)算法源码(支持 Java / JS / Python)每晚9:00 ~ 11:00 在线答疑 真题目录 时间题目考点 or 实现2022.11.27...
EdgeYOLO学习笔记
EdgeYOLO学习笔记 EdgeYOLO: An Edge-Real-Time Object Detector Abstract 本文基于最先进的YOLO框架,提出了一种高效、低复杂度、无锚的目标检测器,该检测器可以在边缘计算平台上实时实现。为了有效抑制训练过程中的过拟合,我们开发了一种…...
【分布式】什么是分布式锁?正文揭晓
分布式锁的概念 分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。 举个例子:假设共享的资源就是一个房子,里面有各种书,分布式系统就是要进屋看书的人, 分布式锁…...
超详细JDK1.8所有版本下载地址
JDK1.8即为JDK8,JDK8是目前是最成熟最稳定的版本,本文将详细介绍JDK1.8历史版本的下载方式。 在此附上JDK1.8安装与配置教程 超详细JDK1.8安装与配置 一、JDK官网 首先打开oracle官网,官网首页地址为 JDK官网首页地址 点击Products 点击…...
论文解析[11] CAT: Cross Attention in Vision Transformer
发表时间:2021 论文地址:https://arxiv.org/abs/2106.05786v1 文章目录摘要3 方法3.1 总体结构3.1.1 Inner-Patch Self-Attention Block3.1.2 Cross-Patch Self-Attention Block3.1.3 Cross Attention based Transformer结论摘要 使用图像patch来替换tr…...
嵌入式和Python(一):python环境搭建的详细步骤
目录 ● 安装python ① 更新软件列表 ② 安装编译python需要用到的环境 ③ 下载python源码 ④ 解压源码包 ⑤ 配置 ⑥ 编译 ⑦ 安装 ● 建立软连接 说明 ① 删除原来的软连接 ② 在/usr/bin/目录创建软连接python,定向/usr/local/bin/python3.9 ③ 检查…...
嵌入式学习笔记——STM32硬件基础知识
STM32开发硬件知识前言单片机参数主频位数STM32最小系统电源电路晶振电路复位电路BOOT选择电路调试接口电路其他电路本文重点本文参考博客链接前言 上一篇中我们重点是讲了一下怎么搭建开发环境以及怎么下载烧录的过程,这都是解决的电脑端的开发环境问题࿰…...
Mybatis插件开发及执行原理
mybatis源码下载 https://github.com/mybatis/mybatis-3,本文分析源码版本3.4.5 mybatis启动大致流程 在看这篇文章前,建议查看我另一篇文章,以了解框架启动的流程和框架中一些重要对象:https://blog.csdn.net/Aqu415/article/…...
Obsidian-skills安全测试完整指南:识别和修复5大关键安全漏洞
Obsidian-skills安全测试完整指南:识别和修复5大关键安全漏洞 【免费下载链接】obsidian-skills Agent skills for Obsidian. Teach your agent to use Markdown, Bases, JSON Canvas, and use the CLI. 项目地址: https://gitcode.com/GitHub_Trending/ob/obsidi…...
DIY迷你平衡摩托车:从PID控制到机械设计全解析
1. 迷你平衡摩托车项目概述作为一名嵌入式开发爱好者,我最近完成了一个迷你平衡摩托车的DIY项目。这个项目的灵感来源于大学生智能车竞赛中的平衡单车组别,但相比那些专业竞赛车模,这个迷你版本更适合个人爱好者动手实现。整个项目从原理分析…...
SEO_2024年最新SEO趋势与核心优化方法介绍(163 )
2024年最新SEO趋势解析:核心优化方法详解 在2024年,搜索引擎优化(SEO)仍然是数字营销中的关键组成部分。随着搜索引擎算法的不断更新,SEO的趋势和核心优化方法也在不断演变。本文将详细解析2024年的最新SEO趋势&#…...
2026年花洒产品推荐:四款热门花洒横评,闭眼入不踩雷
其实选花洒不用盲目追大牌,核心看体验、看品质、看适配性。今天就带来四款热门花洒的深度横评,涵盖瑞尔特、飞利浦、小米米家、九牧四大主流品牌,每款都结合真实使用体验拆解,不罗列参数、不夸大宣传,让每天的沐浴都能…...
电动汽车模型考虑多种需求响应及微网的虚拟电厂日前优化调度模型的MATLAB代码(含空调负荷)
MATLAB代码:含多种需求响应及电动汽车的微网/虚拟电厂日前优化调度 关键词:需求响应 空调负荷 电动汽车 微网优化调度 虚拟电厂调度 仿真平台:MATLABCPLEX 主要内容:代码主要做的是一个微网/虚拟电厂的日前优化调度模型&#…...
滨会生物冲刺港股:年亏1.2亿 乐普生物与扬子江药业是股东
雷递网 雷建平 4月5日武汉滨会生物科技股份有限公司(简称:“滨会生物”)日前更新招股书,准备在港交所上市。滨会生物总计募资超10亿元,其中,2021年2月完成募资6亿元,2022年7月完成募资2.4亿元&a…...
OpenClaw模型微调:gemma-3-12b-it针对自动化任务的专项优化
OpenClaw模型微调:gemma-3-12b-it针对自动化任务的专项优化 1. 为什么需要专项优化? 当我第一次将OpenClaw接入gemma-3-12b-it模型时,发现了一个有趣的现象:这个号称"指令优化"的模型在处理简单问答时表现优异&#x…...
[具身智能-231]:OpenCV的库文件为啥是cv2, 而不是cv?
这是一个非常经典的问题!很多初学者在写代码时都会感到困惑:明明安装的是 opencv-python,为什么导入时却要写 import cv2?而且这个 "2" 到底代表 OpenCV 2 还是 OpenCV 3/4?简单直接的回答是:cv2…...
大学生食品安全科普网页——web网页期末大作业
(文件先保存到自己网盘,谨防文件丢失!!) 源码获取地址 链接: https://pan.baidu.com/s/1r6C8_J31D01e1uG3FJi27w?pwdzxxh提取码: zxxhhtml科普网页源码 ✅ 网页一共6个页面 ✅ 网页使用html css js完成 布局简单 ✅…...
UFS4.0协议之电源与信号完整性设计探析
1. UFS4.0协议的核心电源架构解析 第一次拆解UFS4.0存储芯片时,我被其电源系统的精密设计震撼到了。与早期版本相比,UFS4.0将供电网络细分为VCC(2.5V)、VCCQ(1.2V)和VCCQ2(1.8V)三级…...
