HoRain云--Java单元测试与Mockito实战指南

发布时间:2026/10/14 10:07:33

HoRain云--Java单元测试与Mockito实战指南 单元测试是代码质量的保障。JUnit 5 Mockito是Java测试的标准组合。本文讲解如何写出高质量测试。一、JUnit 5基础java复制下载class CalculatorTest { Test void testAdd() { Calculator calc new Calculator(); assertEquals(3, calc.add(1, 2)); } BeforeEach void setUp() { } AfterEach void tearDown() { } Test DisplayName(除法-除数为0抛异常) void testDivideByZero() { assertThrows(ArithmeticException.class, () - calc.divide(1, 0)); } }二、参数化测试java复制下载ParameterizedTest CsvSource({ 1, 2, 3, 0, 0, 0, -1, 1, 0 }) void testAdd(int a, int b, int expected) { assertEquals(expected, calc.add(a, b)); } ParameterizedTest ValueSource(strings {racecar, level, noon}) void testPalindrome(String s) { assertTrue(isPalindrome(s)); }三、Mockito基础java复制下载ExtendWith(MockitoExtension.class) class UserServiceTest { Mock private UserRepository userRepository; InjectMocks private UserService userService; Test void testGetUser() { User user new User(1L, Tom); when(userRepository.findById(1L)).thenReturn(Optional.of(user)); User result userService.getUser(1L); assertEquals(Tom, result.getName()); verify(userRepository, times(1)).findById(1L); } }四、常用Mockito APIjava复制下载// 返回值 when(mock.method()).thenReturn(value); when(mock.method()).thenThrow(new RuntimeException()); when(mock.method(anyString())).thenAnswer(inv - answer); // 验证 verify(mock).method(); verify(mock, times(2)).method(); verify(mock, never()).method(); verify(mock, timeout(1000)).method(); // 参数捕获 ArgumentCaptorUser captor ArgumentCaptor.forClass(User.class); verify(repo).save(captor.capture()); assertEquals(Tom, captor.getValue().getName()); // 静态方法Mockito 3.4 try (MockedStaticLocalDate mocked mockStatic(LocalDate.class)) { mocked.when(LocalDate::now).thenReturn(LocalDate.of(2024, 1, 1)); // ... }五、测试Controllerjava复制下载WebMvcTest(UserController.class) class UserControllerTest { Autowired private MockMvc mockMvc; MockBean private UserService userService; Test void testGetUser() throws Exception { when(userService.get(1L)).thenReturn(new UserDTO(1L, Tom)); mockMvc.perform(get(/api/users/1)) .andExpect(status().isOk()) .andExpect(jsonPath($.name).value(Tom)); } }六、测试Repositoryjava复制下载DataJpaTest class UserRepositoryTest { Autowired private UserRepository userRepository; Test void testFindByUsername() { userRepository.save(new User(null, Tom, 20)); OptionalUser user userRepository.findByUsername(Tom); assertTrue(user.isPresent()); } }七、测试覆盖率xml复制下载运行plugin groupIdorg.jacoco/groupId artifactIdjacoco-maven-plugin/artifactId version0.8.10/version executions execution goals goalprepare-agent/goal /goals /execution execution idreport/id phasetest/phase goals goalreport/goal /goals /execution /executions /plugin八、测试最佳实践遵循AAAArrange-Act-Assert一个测试只验证一个行为测试命名清晰should_xxx_when_yyy避免测试依赖顺序Mock外部依赖不Mock被测类覆盖率不是目标质量才是九、总结好的测试是重构的底气。JUnit 5 Mockito JaCoCo 是Java测试的黄金组合。养成写测试的习惯代码质量自然提升。
延伸阅读

更多相关文章

2026/10/14 10:07:33

MLCC供需缺口持续扩大,涨价潮从高端向全品类蔓延

被业内称为“电子工业大米”的MLCC,正处于本轮电子元器件涨价潮的风暴中心。自2025年末以来,海外头部厂商率先启动调价:村田制作所对AI服务器及高端车规级产品全线调价,涨幅15%至35%;三星电机于8月统一上调全线MLCC产品…

2026/10/14 10:07:33

工业园区低碳优化调度模型设计与实践

1. 项目背景与核心价值低碳优化调度模型在当前能源转型背景下具有极强的现实意义。去年参与某工业园区综合能源系统改造时,我们团队发现传统调度方式存在两个致命缺陷:一是过度依赖化石能源导致碳排放居高不下,二是运行成本受能源价格波动影响…

2026/10/14 14:35:00

DFT在OFDM系统中的核心作用与工程实现

1. 离散傅里叶变换(DFT)与OFDM的渊源第一次听说OFDM技术时,我被它复杂的数学公式和频域分析搞得晕头转向。直到有一天,我把OFDM系统框图旁边的DFT模块圈出来反复研究,才恍然大悟——原来这个看似高深的多载波调制技术&…

2026/10/14 14:35:00

亚洲精品可可产业的风味科学与工艺革新

1. 亚洲精品可可产业现状解析过去十年间,亚洲可可产区正在经历一场静默的革命。从越南达乐省到菲律宾达沃地区,再到印度喀拉拉邦,小型农场主们不再满足于充当全球巧克力工业的原料供应商,而是开始直接掌控从豆到棒的完整价值链。这…

2026/10/14 14:35:00

Qt 6.5 MODBUS TCP 客户端实战:解决连通但读不到数的工业通信难题

简介:本资源是一个基于Qt Creator开发的MODBUS TCP主站客户端完整工程,面向工业自动化领域初学者与嵌入式/上位机开发工程师,解决Modbus设备远程数据采集与可视化显示的实际问题。项目采用Qt 5.9跨平台框架,涵盖网络连接、协议请求…

2026/10/14 14:35:00

基于STM32F103的DS18B20温度控制系统设计与PID控温实现

简介:基于STM32的温度控制系统设计(PDF版)是一份面向嵌入式初学者的完整工程实践参考,适用于温室、恒温箱等需要稳定监测与调控温度的场合。系统以STM32F103单片机为主控,结合DS18B20数字温度传感器采样、OLED显示屏呈…

2026/10/14 14:35:00

《跑外卖》读书笔记:从接单到送达,读懂骑手、算法与平台规则

《跑外卖》这本书记录了一名普通白领辞职后真正去跑了一个多月外卖的全过程。不是那种站在写字楼里俯瞰骑手的高谈阔论,而是切切实实注册账号、买装备、接单被骂、淋雨摔跤、和小区保安打交道的第一手实录。我读完整本之后最大的感受是:外卖这行&#xf…

2026/10/14 14:29:59

筑基期修士打印任务管理系统设计与优化

1. 项目背景与核心价值在东方仙盟筑基期修士的日常修炼中,打印任务管理一直是个令人头疼的问题。传统的玉简记录方式效率低下,而现代修真界又缺乏专门针对筑基期修士设计的任务管理系统。"未来之窗昭和仙君"第六十三期项目正是为了解决这一痛点…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/13 17:09:18

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/14 0:00:33

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:33

macOS/iOS高精度计时:mach_absolute_time原理与实战

1. 项目概述:为什么mach_absolute_time是 macOS/iOS 时间测量的“黄金标准”在 macOS 和 iOS 开发中,我见过太多人用CFAbsoluteTimeGetCurrent()或NSDate.timeIntervalSinceReferenceDate做性能打点,结果在高精度场景下被系统时钟跳变、NTP 同…

2026/10/14 0:00:33

SCORM课件演示与测试全解析:从API通信到自动化验证

简介:这是一套遵循SCORM标准的交互式课件演示与测试资源,面向E-Learning课程开发者、LMS平台测试人员及在线教学从业者,用于验证课件在不同学习管理系统中的识别、传递与跟踪能力。压缩包共28个文件,约12.07MB,以swf动…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑