详解junit
目录
1.概述
2.断言
3.常用注解
3.1.@Test
3.2.@Before
3.3.@After
3.4.@BeforeClass
3.5.@AfterClass
4.异常测试
5.超时测试
6.参数化测试
1.概述
什么是单元测试:
单元测试,是针对最小的功能单元编写测试代码,在JAVA中最小的功能单元是方法,单元测试针对JAVA就是单个方法的测试。目的就是保证单个方法的正常运行。
JUnit是什么:
专门针对java语言设计,使用广泛的一个标准单元测试框架。使用断言+注解的方式对单个方法进行测试。注解用来控制行为,断言用来进行判断。
2.断言
| 名称 | 说明 | 示例 |
|---|---|---|
| assertEquals | 相等 | assertEquals(100,x) |
| assertArrayEquals | 数组相等 | assertArrayEquals({1,2,3},x) |
| assertEquals | 浮点数相等 | assertEquals(3.1415926,x) |
| assertNull | null | assertNull(x) |
| assertTrue | true | assertTrue(x>0) |
| assertFalse | false | assertFalse(x<0) |
| assertNotEquals | 不相等 | assertNotEquals(100,x) |
| assertNotNull | 不为空 | assertNotNull(x) |
3.常用注解
3.1.@Test
@Test,用来注解单个测试用例,每个@Test就是个独立的单元,单个@Test的生命周期是相互独立的。
代码示例:
public class Demo1Test {Demo1 demo1;public Demo1Test(){System.out.println("建立测试用例!");}@Beforepublic void before(){System.out.println("测试开始!");demo1=new Demo1();}@Testpublic void testSum1(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Testpublic void testSum2(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Afterpublic void after(){System.out.println("测试结束!");}
}
测试结果:

3.2.@Before
@Before,@Test之前执行,一般用于准备一些资源。
代码示例:
public class Demo1Test {Demo1 demo1;@Beforepublic void before(){demo1=new Demo1();}@Testpublic void testSum(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}
}
3.3.@After
@After,@Test之后执行,一般用于释放一些资源。
代码示例:
public class Demo1Test {Demo1 demo1;@Beforepublic void before(){demo1=new Demo1();}@Testpublic void testSum(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Afterpublic void after(){System.out.println("测试结束!");}
}
3.4.@BeforeClass
@BeforeClass,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期开始的时候执行一次。
一般用于准备一些所有用例共享的资源。
代码示例:
public class Demo1Test {Demo1 demo1;@BeforeClasspublic static void beforeClass(){System.out.println("beforeClass......");}public Demo1Test(){System.out.println("建立测试用例!");}@Beforepublic void before(){System.out.println("测试开始!");demo1=new Demo1();}@Testpublic void testSum1(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Testpublic void testSum2(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Afterpublic void after(){System.out.println("测试结束!");}
}
运行结果:

3.5.@AfterClass
@AfterClass,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期结束的时候执行一次。
一般用于销毁一些所有用例共享的资源。
代码示例:
public class Demo1Test {Demo1 demo1;@BeforeClasspublic static void beforeClass(){System.out.println("beforeClass......");}public Demo1Test(){System.out.println("建立测试用例!");}@Beforepublic void before(){System.out.println("测试开始!");demo1=new Demo1();}@Testpublic void testSum1(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Testpublic void testSum2(){Assert.assertEquals("65",demo1.sum("5",2,4,6));}@Afterpublic void after(){System.out.println("测试结束!");}@AfterClasspublic static void afterClass(){System.out.println("afterClass......");}
}
运行结果:

4.异常测试
通过@Test注解的expected属性可以断定该TestCase抛出的异常,抛出不匹配的异常会报错。
代码示例:
@Test(expected = NumberFormatException.class)public void testNumberFormat(){Integer.parseInt(null);}
5.超时测试
通过@Test注解的timeout属性可以设置每个TestCase执行耗时的时间阈值,超时会报错。
代码示例:
@Test(timeout = 3000)public void testNumberFormat(){try {Thread.sleep(4000);} catch (InterruptedException e) {e.printStackTrace();}}
6.参数化测试
Junit提供了输入一组参数进行测试的机制。
代码示例:
@RunWith(Parameterized.class)
public class ParameterTest {//用于准备一组数据的方法//方法严格约定为 public Collection<?> data()@Parameterized.Parameterspublic static Collection<?> data(){return Arrays.asList(new Object[][]{{0,0},{1,1},{-1,1}});}int input;int expected;//准备好的数据会在构造方法中自动传递过来public ParameterTest(int input,int expected){this.input=input;this.expected=expected;}@Testpublic void testAbs(){int r=Math.abs(this.input);Assert.assertEquals(this.expected,r);}
}
相关文章:
详解junit
目录 1.概述 2.断言 3.常用注解 3.1.Test 3.2.Before 3.3.After 3.4.BeforeClass 3.5.AfterClass 4.异常测试 5.超时测试 6.参数化测试 1.概述 什么是单元测试: 单元测试,是针对最小的功能单元编写测试代码,在JAVA中最小的功能单…...
Nginx的安装及负载均衡搭建
一.Nginx的安装 1)准备安装环境 yum install -y make gcc gcc-c pcre-devel pcre zlib zlib-devel openssl openssl-develPERE PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。 nginx的http模块使用pcre来解…...
JVM学习笔记(一)
1. JVM快速入门 从面试开始: 请谈谈你对JVM 的理解?java8 的虚拟机有什么更新? 什么是OOM ?什么是StackOverflowError?有哪些方法分析? JVM 的常用参数调优你知道哪些? 内存快照抓取和MAT分…...
fastjson 序列化问题:Comparison method violates its general contract
fastjson 序列化问题:Comparison method violates its general contract 问题重现 今天在测试接口的时候,调用了Mybatis Plus 分页查询的接口,然后将查询的结果转换成 Json字符串的形式,结果报了这个错误: java.lang.…...
Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源
一:错误出现 这个错误的意思是,拒绝将字符串评估为 JavaScript,因为‘unsafe-eval’不是以下内容安全策略中允许的脚本源。 二:错误场景 testEval() {const data eval("var sum2 new Function(a, b, return a b); sum2(em…...
十一、Linux用户及用户组的权限信息如何查看?如何修改?什么是权限的数字序号?
目录: 1、认知权限信息 2、rwx? (1)总括: (2)r权限: (3)w权限: (4)x权限: 3、修改权限 (1&a…...
ahooks.js:一款强大的React Hooks库及其API使用教程(二)
一、ahooks.js简介二、ahooks.js安装三、继续ahooks.js API的介绍与使用教程21. useLocalStorageState22. useSessionStorageState23. useClickAway24. usePersistFn25. useCreation26. useFullscreen27. useInViewport28. useInfiniteScroll29. usePagination30. useDynamicLi…...
ARM 配置晶振频率
文章目录 前言串口乱码问题定位内核修改晶振频率uboot 修改晶振频率番外篇 前言 上篇文章《ARM DIY 硬件调试》介绍了 DIY ARM 板的基础硬件焊接,包括电源、SOC、SD 卡座等,板子已经可以跑起来了。 但是发现串口乱码,今天就来解决串口乱码问…...
最强自动化测试框架Playwright(37)-网络
介绍 Playwright 提供 API 来监控和修改浏览器网络流量,包括 HTTP 和 HTTPS。页面执行的任何请求,包括 XHR 和获取请求,都可以被跟踪、修改和处理。 模拟接口 查看我们的 API 模拟指南,了解有关如何 模拟 API 请求,…...
Ant Design Pro 前端脚手架 配置混合导航
Ant Design Pro脚手架 点击查看阅读 混合导航: 顶部导航和侧边栏导航实现联动效果,点击不同的顶部导航按钮会显示对应的子菜单项。 实现点: 1. 路由的配置 菜单展示 我们可以在 route 中进行 menu 相关配置,来决定当前路由是否…...
tcl学习之路(五)(Vivado时序约束)
1.主时钟约束 主时钟通常是FPGA器件外部的板机时钟或FPGA的高速收发器输出数据的同步恢复时钟信号等。下面这句语法大家一定不会陌生。该语句用于对主时钟的名称、周期、占空比以及对应物理引脚进行约束。 create_clock -name <clock_name> -periood <period> -wa…...
Hlang-中英双语言编程语言使用手册
文章目录 介绍Hlang基本使用下载配置环境变量特性中文关键字支持中文符号混合编程中文错误提示终端多行输入基本数据类型整数浮点数列表字符串基本操作变量定义逻辑判断基本运算条件判断循环函数介绍 Hlang是一款基于Python编写的支持中英文混合编程的动态语言。其简单易上手,…...
centos 7 安装docker
系统配置: CentOS关闭selinux sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config关闭防火墙(可选)或者放行相应端口 systemctl stop firewalld.service && systemctl disable firewalld.service配置内核IP 转发 net.ipv4.ip_forward1 dock…...
Spring环境搭建、SpringIOC容器基础、SpringDI基础
文章目录 Spring环境搭建、SpringIOC容器基础、SpringDI基础一、SpringIOC核心思想二、搭建Spring环境步骤三、SpringIOC容器使用步骤四、SpringIOC 总结五、SpringDI(依赖注入)1、基本概念2、实现方式(1)set 注入(2&a…...
CentOS7.9手工配置静态网络流程
进入网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 配置 TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" //static 配置静态网络 DEFROUTE"yes" IPV4_FAILURE_FATAL"no…...
JVM面试题-1
1、什么是JVM内存结构? jvm将虚拟机分为5大区域,程序计数器、虚拟机栈、本地方法栈、java堆、方法区; 程序计数器:线程私有的,是一块很小的内存空间,作为当前线程的行号指示器,用于记录当前虚拟…...
漫谈红黑树:红黑树的奇妙演化
漫谈红黑树:红黑树的奇妙演化 一、红黑树的提出二、红黑树性质的简单推导三、结论 博主简介 💡一个热爱分享高性能服务器后台开发知识的博主,目标是通过理论与代码实践的结合,让世界上看似难以掌握的技术变得易于理解与掌握。技能…...
docker启动rabbitmq,但是页面加载不出来问题解决
首先docker启动rabbitmq docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq -d 后台运行 -p 映射外部端口 -- name 取名(方便管理) 然后发现,成功启动rabbitmq,却加载不进去 因为你下载的是rabbitmq的latest…...
Qt项目报错:Cannot run compiler ‘clang++‘. /bin/sh: 1: clang++: not found
在一台旧电脑上装了深度系统,装了Qt,导入项目, build提示 clang找不到: Project ERROR: Cannot run compiler clang. Output: /bin/sh: 1: clang: not found Maybe you forgot to setup the environment? Error while parsing …...
奇舞周刊第503期:图解串一串 webpack 的历史和核心功能
记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 图解串一串 webpack 的历史和核心功能 提到打包工具,可能你会首先想到 webpack。那没有 webpack 之前,都是怎么打包的呢?webpack 都有哪些功能&…...
LZ4与ZSTD压缩算法在LLM内存优化中的硬件实现对比
1. 项目概述:压缩算法在LLM内存优化中的关键作用 在大型语言模型(LLM)推理过程中,内存带宽和容量一直是制约性能的关键瓶颈。特别是随着模型规模的不断扩大,KV缓存(Key-Value Cache)所占用的内存…...
图片换背景底色怎么制作?2026年最全工具对比和实操指南
前几天,有个朋友问我怎样快速给证件照换个蓝色背景,我才意识到很多人其实不知道现在换背景底色有多简单。无论是证件照、商品图、还是自媒体头图,一键就能搞定。今天我就把自己用过的所有工具和方法整理出来,分享给大家。为什么越…...
UE5视频插件深度解析:如何实现高效的实时流媒体处理与录制
UE5视频插件深度解析:如何实现高效的实时流媒体处理与录制 【免费下载链接】InVideo 基于UE4实现的rtsp的视频播放插件 项目地址: https://gitcode.com/gh_mirrors/in/InVideo InVideo是一款基于Unreal Engine 5开发的专业级实时视频处理插件,专为…...
3步轻松解锁QQ音乐加密文件:macOS用户必备的解码工具
3步轻松解锁QQ音乐加密文件:macOS用户必备的解码工具 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转…...
ORT Reporter输出格式全解析:生成SPDX、CycloneDX和静态HTML报告的终极指南
ORT Reporter输出格式全解析:生成SPDX、CycloneDX和静态HTML报告的终极指南 【免费下载链接】ort A suite of tools to automate software compliance checks. 项目地址: https://gitcode.com/gh_mirrors/or/ort ORT(Open Source Review Toolkit&…...
Fast-Planner核心思想拆解:从B样条优化到时间重分配,如何让无人机飞得更快更稳?
Fast-Planner核心思想解析:从B样条优化到时间重分配的无人机高速运动规划 无人机在复杂环境中的高速飞行一直是运动规划领域的重大挑战。传统方法往往在速度提升后出现轨迹抖动或避障失效的问题,而Fast-Planner通过创新的算法架构实现了"又快又稳&q…...
AI应用开发与AI Agent开发:小白程序员必备技能,收藏学习迎高薪未来!
本文介绍了AI应用开发和AI Agent开发的核心概念和区别,通过传统后端开发、AI应用开发和AI Agent开发三个场景的对比,阐述了AI技术如何赋能产品和服务。AI应用开发是将大模型能力嵌入产品,而AI Agent开发则是让大模型自主完成任务。文章还结合…...
Excel公式生成黑科技落地实录(ChatGPT+Power Query+LAMBDA三引擎联动)
更多请点击: https://intelliparadigm.com 第一章:Excel公式生成黑科技落地实录(ChatGPTPower QueryLAMBDA三引擎联动) 场景驱动的智能公式生成闭环 当财务团队需在5分钟内为127张销售报表动态生成「跨表多条件加权滚动同比」公…...
5分钟实现PNG/JPG到SVG的终极转换:vectorizer矢量化工具完全指南
5分钟实现PNG/JPG到SVG的终极转换:vectorizer矢量化工具完全指南 【免费下载链接】vectorizer Potrace based multi-colored raster to vector tracer. Inputs PNG/JPG returns SVG 项目地址: https://gitcode.com/gh_mirrors/ve/vectorizer vectorizer是一个…...
避坑指南:用MOT17训练YOLOv7检测器时,为什么你的mAP上不去?可能是数据划分的锅
MOT17数据集划分陷阱:为什么你的YOLOv7检测器性能不达标? 当你在MOT17数据集上训练YOLOv7检测器时,是否遇到过这样的困境:损失曲线看起来完美,训练集准确率节节攀升,但验证集mAP却始终徘徊在低水平…...
