首页/新闻资讯/正文详情

在IDE中使用JUnit(入门)

发布时间:2026/11/6 2:19:52 来源:云帆数科 栏目:资讯中心
在IDE中使用JUnit(入门)
在IDE中使用JUnit目录在IDE中使用JUnit1.JUnit简介2.待测试代码3.在IDEA中使用JUnit测试4.在IDEA的Maven项目中使用JUnit测试第一步在pom.xml中添加 JUnit 6 依赖第二步确认测试目录第三步创建测试类第四步编写测试代码(加上断言)第五步故意制造一次失败看看断言的效果第六步运行测试1.JUnit简介JUnit 是 Java 里最常用的单元测试框架。简单说它让你不用写main方法、不用手动System.out.println看结果就能把一段代码单独拿出来跑一遍并且清楚地告诉你它是“通过”还是“失败”。在 IDEA 里只要方法上加了 JUnit 的注解左边就会出现绿色箭头点一下就能运行运行结果会显示在 Run 面板里。如果方法里抛出异常或者断言不成立这个测试就会被标成红色失败一切正常则是绿色通过。写测试时最常用的几个注解Test标记一个方法是测试方法JUnit 会自动调用它。你前面写的sort()和arraysSort()用的就是这个。BeforeEach在每个Test方法之前执行一次常用来准备测试数据。AfterEach在每个Test方法之后执行一次常用来清理资源。BeforeAll/AfterAll在整个测试类的所有方法开始前/结束后各执行一次方法必须是static。你之前把大数组的生成和clone()放在静态初始化块里思路类似只是这两个注解更“正式”一些。Disabled暂时跳过某个测试方法适合还没写完或者暂时不想跑的用例。配合注解使用的还有断言比如assertEquals、assertArrayEquals、assertTrue等(来自org.junit.jupiter.api.Assertions)。它们用来判断“实际结果”和“期望结果”是否一致——如果一致测试通过不一致测试失败并给出提示。你现在的测试只调用了排序方法还没有加断言所以即使排序结果不对测试也会显示通过。后面可以试着在sort()里加一句assertArrayEquals(...)让测试真正“检查”排序是否正确。截至2026年最新的JUnit版本为JUnit 6你在你的IDE中使用Junit 5或6均可。注意JUnit 6要求Java 17及以上版本。2.待测试代码这里要测试的是一个简单自编的冒泡排序算法代码如下package testDebug; import java.util.Arrays; public class MySort { public static void sort(int[] a) { for (int i a.length; --i 0; ) { for (int j 0; j i; j) { if (a[j] a[j 1]) { swap(a, j, j 1); } } } } public static void swap(int[] array, int i, int j) { int temp array[i]; array[i] array[j]; array[j] temp; } public static void main(String[] args) { int[] intarray {1, 2, 3, 7, 9, 0, 5, 4}; // 测试1测试排序算法 long start System.nanoTime(); sort(intarray); long end System.nanoTime(); double seconds (end - start) / 1_000_000_000.0; System.out.println(sort 耗时: seconds 秒); System.out.println(Arrays.toString(intarray)); // 测试2测试Arrays.sort方法 start System.nanoTime(); Arrays.sort(intarray); end System.nanoTime(); seconds (end - start) / 1_000_000_000.0; System.out.println(Arrays.sort 耗时: seconds 秒); } }上述代码中已有测试两个排序算法(自编的冒泡排序与Arrays.sort)运行速度的代码可以直接在控制台输出两个排序算法的运行时间。3.在IDEA中使用JUnit测试针对如上MySort.java可以在IDEA中进行测试。点击要测试的类名如MySort按Alt Enter点击Create Test在Testing library选择 JUnit5。详见下图如果提示Junit5 library not found in the module点击Fix。IDE会自动下载相应的包并进行相关设置在 Class Name 中写入所要新建的用于测试的类名这里是MySortTest在 Destination package 中填入 所要新建的JUnit测试要放在哪个包中在 Member 中点选你要测试的方法名如sort。打开 MySortTest.java并编写相应的测试代码。如果提示有些类找不到的错误可直接点击相应位置然后按Alt Enter进行修复测试代码如下就是对一个大小为50000的随机生成的数组的两个副本分别进行排序package testDebug; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.Random; class MySortTest { private static final int[] BIG_ARRAY new int[50_000]; // 两份副本在类加载时就准备好clone 不计入任何测试的耗时 private static final int[] MY_SORT_ARRAY; private static final int[] ARRAYS_SORT_ARRAY; static { Random random new Random(42); for (int i 0; i BIG_ARRAY.length; i) { BIG_ARRAY[i] random.nextInt(); } MY_SORT_ARRAY BIG_ARRAY.clone(); ARRAYS_SORT_ARRAY BIG_ARRAY.clone(); } Test // 方法上加了 TestJUnit 就会在运行测试时自动调用它不需要你写 main 方法手动调用 void sort() { MySort.sort(MY_SORT_ARRAY); } Test void arraysSort() { Arrays.sort(ARRAYS_SORT_ARRAY); } }测试 MySortTest在编辑器点击 MySortTest 按Alt Enter然后点击Run MySortTest运行该类中的所有测试。也可以用同样的方法测试 MySortTest.java 中的上面使用Test标注的方法进行单方法测试。4.在IDEA的Maven项目中使用JUnit测试前面的例子是在普通 Java 项目里直接跑测试的。如果你的项目是 Maven 项目步骤会稍有不同——JUnit 不再让 IDEA 临时帮你下载而是通过pom.xml声明依赖由 Maven 统一管理。这里用JUnit 6它要求Java 17 或更高版本。第一步在pom.xml中添加 JUnit 6 依赖新建一个Maven项目打开项目根目录下的pom.xml在dependencies里加入dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId version6.0.3/version scopetest/scope /dependency6.0.3是当前可用的 JUnit 6 稳定版本。scopetest/scope表示只在测试代码里可见不会被打进最终程序包。。加完后点击 IDEA 右侧 Maven 面板顶部的 “Sync All Maven Projects” 图标(通常是一个带圆形箭头的刷新按钮)让 IDEA 重新导入依赖。如果 Sync 后问题依旧可以再尝试旁边的 “Reload All Maven Projects”(两个箭头循环的图标)来彻底重建项目模型。第二步确认测试目录Maven 项目的标准目录结构是src/main/java ← 生产代码 src/test/java ← 测试代码在项目视图里src/test/java应该显示为绿色的 Test Sources Root。如果不是右键该目录 →Mark Directory as→Test Sources Root。第三步创建测试类光标放在MySort类名上按Alt Enter→Create Test。Testing library 下拉框里如果没有 JUnit 6 选项选 JUnit 5 即可——因为 Maven 已经在pom.xml里指定了 JUnit 6 的依赖IDEA 实际运行时会使用 Maven 管理的版本。类名填MySortTest包名保持testDebug。如下图所示第四步编写测试代码(加上断言)JUnit 6 的 Jupiter 模型和 JUnit 5 基本一致核心注解和断言方法都没变你之前写的测试代码可以直接用。下面在保留耗时对比的同时加入断言来验证排序结果package testDebug; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.Random; import static org.junit.jupiter.api.Assertions.*; class MySortTest { private static final int[] BIG_ARRAY new int[50_000]; // 两份待测试的副本 private static final int[] MY_SORT_ARRAY; private static final int[] ARRAYS_SORT_ARRAY; // 提前准备好的“标准答案”数组(已排序) private static final int[] EXPECTED_SORTED_ARRAY; static { Random random new Random(42); for (int i 0; i BIG_ARRAY.length; i) { BIG_ARRAY[i] random.nextInt(); } // 为测试方法准备副本 MY_SORT_ARRAY BIG_ARRAY.clone(); ARRAYS_SORT_ARRAY BIG_ARRAY.clone(); // 准备标准答案复制一份原始乱序数组直接排好序 EXPECTED_SORTED_ARRAY BIG_ARRAY.clone(); Arrays.sort(EXPECTED_SORTED_ARRAY); } Test void sort() { MySort.sort(MY_SORT_ARRAY); // 断言自编的冒泡排序结果必须与标准答案一致 assertArrayEquals(EXPECTED_SORTED_ARRAY, MY_SORT_ARRAY); } Test void arraysSort() { Arrays.sort(ARRAYS_SORT_ARRAY); // 断言Arrays.sort 的结果也必须与标准答案一致 assertArrayEquals(EXPECTED_SORTED_ARRAY, ARRAYS_SORT_ARRAY); // 断言2(备用)也可以使用 assertTrue 循环遍历验证结果是非递减的 // 讲解 assertTrue 时可以取消注释体验它的效果 /* for (int i 1; i ARRAYS_SORT_ARRAY.length; i) { assertTrue(ARRAYS_SORT_ARRAY[i - 1] ARRAYS_SORT_ARRAY[i]); } */ } }两个最常用的断言assertArrayEquals(expected, actual)比较两个数组内容是否完全一致。expected传ARRAYS_SORT_ARRAY.clone()避免因测试执行顺序不同导致ARRAYS_SORT_ARRAY已被原地排序而比对出错。assertTrue(condition)条件为真则通过。这里检查相邻元素是否满足非递减关系。第五步故意制造一次失败看看断言的效果临时把sort()里的断言改成错误期望assertArrayEquals(BIG_ARRAY, MY_SORT_ARRAY); // 故意写错拿原始乱序数组去比再运行一次测试会变红Run 面板会显示类似arrays first differed at element [0]的提示告诉你从哪个位置开始不一致。看完后记得把断言改回正确版本。第六步运行测试点击MySortTest类名按Alt Enter→Run MySortTest跑整个类也可以点某个Test方法左边的绿色箭头只跑那一个。IDEA 会在 Run 面板里列出每个测试方法的耗时和通过状态。Maven 项目还有一个额外好处你也可以在终端执行mvn test让 Maven 跑完所有测试并生成报告不依赖 IDEA。

相关推荐

Fiddler抓包改价实战:从HTTPS解密到接口契约验证
Fiddler抓包改价实战:从HTTPS解密到接口契约验证

简介:这份资源面向希望了解移动端抓包与请求篡改原理的学习者,围绕 Fiddler 抓包工具在购物支付场景中的应用展开,通过视频演示与配套文档讲解如何借助抓包工具观察并修改商品价格相关请求,帮助读者理解 HTTP/HTTPS 抓包分析的基本… · 2026/11/6 2:19:52

蓝桥杯拔河问题:动态规划解法与优化技巧
蓝桥杯拔河问题:动态规划解法与优化技巧

1. 项目背景与需求解析"拔河"这个题目乍看简单,但作为蓝桥杯竞赛题,其背后往往隐藏着精巧的算法设计和思维陷阱。这类题目通常考察选手对动态规划、贪心算法等经典解题思路的掌握程度,以及将实际问题抽象为数学模型的能力。在实际解… · 2026/11/6 2:19:52

JSP+MySQL实现4S店试驾预约系统优化实践
JSP+MySQL实现4S店试驾预约系统优化实践

1. 项目背景与核心价值汽车4S店的试驾预约流程数字化改造已经成为行业标配。传统电话预约方式存在信息记录不全、客户等待时间长、销售顾问跟进效率低等问题。这套基于JSP的普洱捷达4S店预约试驾系统,正是针对这些痛点设计的轻量级解决方案。我在实际部署中发现&… · 2026/11/6 2:18:52

VS2019编译Assimp模型导入库:从源码到aiScene实战
VS2019编译Assimp模型导入库:从源码到aiScene实战

简介:这份资源是面向 Visual Studio 2019、x64 平台预编译好的 Assimp 三维模型导入库,主要服务于从事游戏开发、3D 建模及相关图形应用的中高级 C 开发者,帮助其免去自行编译第三方库的繁琐流程,直接完成多格式模型加载与预处理。… · 2026/11/6 2:22:53

肯德基系统崩溃事件分析与高可用架构优化
肯德基系统崩溃事件分析与高可用架构优化

1. 事件背景与影响范围2023年2月25日晚间,肯德基全国范围内出现系统崩溃,持续时间约2小时。这次事件影响了全国超过6000家门店的POS系统、自助点餐机、手机App和小程序等多个终端,导致门店无法正常接单和收银。根据事后统计,受影响… · 2026/11/6 2:22:53

Java算法刷题实战:力扣每日一练与性能优化
Java算法刷题实战:力扣每日一练与性能优化

1. 项目背景与核心价值作为一名有五年刷题经验的Java工程师,我深刻理解每日坚持算法练习对职业发展的重要性。"力扣每日一练——Java"这个项目正是基于三个核心痛点设计的:知识碎片化:很多开发者刷题时东一榔头西一棒子&#xff0c… · 2026/11/6 2:22:53

基于STM32和蓝牙5.0的智能自行车锁开发实践
基于STM32和蓝牙5.0的智能自行车锁开发实践

1. 项目概述:当自行车遇上智能锁作为一名经常丢车的老骑友,我深知传统机械锁的痛点:要么太重影响骑行体验,要么太轻一剪就断。去年冬天连续丢了两辆电动自行车后,我决定自己动手开发一款真正靠谱的智能防盗锁。经过三个… · 2026/11/6 2:22:53

Redis Lua脚本实战:分布式锁与限流器实现
Redis Lua脚本实战:分布式锁与限流器实现

1. Redis Lua脚本应用深度解析作为Redis最强大的特性之一,Lua脚本在分布式系统开发中扮演着关键角色。我在实际项目中用Lua脚本解决了大量分布式锁、秒杀库存扣减等典型场景问题,今天就把这些实战经验系统性地分享给大家。Redis从2.6版本开始内置Lua解释… · 2026/11/6 2:22:53

Redis持久化机制:RDB与AOF实战解析
Redis持久化机制:RDB与AOF实战解析

1. Redis持久化机制全景解读在分布式系统架构中,缓存服务的数据可靠性始终是架构师们最关注的焦点之一。作为内存数据库的标杆产品,Redis通过两种互补的持久化方案确保数据安全:RDB快照和AOF日志。去年某电商平台的大促事故让我深刻认识到——… · 2026/11/6 2:21:53

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码