【前后端开发知识 - 边开发边学习】什么的单元测试、集成测试和E2E测试?
单元测试 vs. 集成测试 vs. E2E测试什么的单元测试、集成测试和E2E测试单元测试 vs 集成测试 单元测试Unit Test通俗理解测试单个零件能不能用。说人话就是在不运行完整前后端系统的情况下通过构造假设数据Mock/Stub来验证业务逻辑的正确性。后端例子AuthServiceTest.java 集成测试Integration Test通俗理解测试几个零件组装后能不能用。说人话与单元测试的区别是不再”造假“。后端例子PartCrudApiTest.java E2E 测试End-to-End Test通俗理解测试真实用户使用的完整流程。理解前端例子part-crud.spec.tsE2E 测试属于集成测试对比总结我的项目中的测试最佳实践什么的单元测试、集成测试和E2E测试单元测试 vs 集成测试 单元测试Unit Test定义测试单个组件/函数隔离其他依赖用 Mock 替代。通俗理解测试单个零件能不能用。说人话就是在不运行完整前后端系统的情况下通过构造假设数据Mock/Stub来验证业务逻辑的正确性。类比造汽车你造了一个发动机单元测试就是把发动机单独拿出来不装到车上用模拟器测试能不能启动转速正常吗不管它和轮胎、方向盘配不配特点✅ 快不启动 Spring 容器不连数据库毫秒级✅ 隔离只测 AuthService.login() 逻辑不测 Mapper/数据库✅ 可控Mock 可以模拟任何场景用户不存在、密码错误等❌ 不真实无法发现 SQL 错误、网络问题 缺点不知道装到车上能不能跑// 单元测试只测 PartService.createPart() 这一个方法TestvoidtestCreatePart(){// 假装数据库返回成功不真的连数据库when(partMapper.insert(any())).thenReturn(1);// 测试这个方法的逻辑PartresultpartService.createPart(dto);// 验证零件编号生成了吗assertNotNull(result.getPartNumber());}后端例子AuthServiceTest.javaExtendWith(MockitoExtension.class)// 使用 Mockito 框架classAuthServiceTest{Mock// 模拟依赖不真实调用数据库privateSysUserMappersysUserMapper;MockprivateBCryptPasswordEncoderpasswordEncoder;InjectMocks// 被测试的对象注入上面的 MockprivateAuthServiceauthService;TestvoidtestLogin_success(){// 1. 准备测试数据SysUserusernewSysUser();user.setUsername(admin);user.setPassword($2a$10$encoded);// 2. 模拟依赖行为不真实查数据库when(sysUserMapper.selectOne(any())).thenReturn(user);when(passwordEncoder.matches(admin123,user.getPassword())).thenReturn(true);// 3. 执行被测方法LoginDTOdtonewLoginDTO(admin,admin123);SaTokenInforesultauthService.login(dto);// 4. 验证结果assertNotNull(result.getTokenValue());}} 集成测试Integration Test定义测试多个组件协作使用真实依赖真实数据库/网络。通俗理解测试几个零件组装后能不能用。类比造汽车续说人话与单元测试的区别是不再”造假“。你把发动机 变速箱 轮子组装好集成测试就是真的装到车上真的加油真的踩油门看能不能跑起来// 集成测试测试完整的 API 调用链路TestvoidtestCreatePartApi(){// 发送真实的 HTTP 请求会真的连数据库ResponserespRestAssured.post(http://localhost:8082/api/parts);// 验证数据库里真的插入了吗PartdbPartpartMapper.selectOneById(partId);assertNotNull(dbPart);}后端例子PartCrudApiTest.javaFeature(零部件管理)classPartCrudApiTestextendsBaseApiTest{// 继承基类启动真实服务TestDescription(正常创建零部件期望返回 200 及自动生成的零件编号)voidtestCreatePart_success(){MapString,ObjectbodyMap.of(name,测试零件-API-001,type,MECHANICAL);// 发送真实 HTTP 请求到 http://localhost:8082/api/partsResponserespRestAssured.given(REQUEST_SPEC).body(body).post(/api/parts);// 验证响应resp.then().statusCode(200).body(code,equalTo(200)).body(data.partNumber,startsWith(P));// 验证编号生成逻辑// 验证数据库真实插入了LongpartIdresp.jsonPath().getLong(data.id);PartdbPartpartMapper.selectOneById(partId);assertEquals(测试零件-API-001,dbPart.getName());}}特点✅ 真实测试完整链路 Controller → Service → Mapper → MySQL✅ 发现问题能发现 SQL 错误、事务问题、网络超时❌ 慢需要启动 Spring Boot 连数据库秒级❌ 依赖环境需要 MySQL/Redis 运行 E2E 测试End-to-End Test定义最广泛的集成测试全系统通俗理解测试真实用户使用的完整流程。类比造汽车续E2E 测试就是找一个真人司机让他从家里开车去公司看会不会车门打不开导航找不到路半路抛锚特点✅ 用户视角模拟真实用户操作点击、输入、提交✅ 全链路测试前端 Vue 组件 后端 API 数据库❌ 最慢需要启动浏览器 前端服务 后端服务10秒级❌ 脆弱UI 改动按钮文字变化会导致测试失败理解如果把软件开发比作造汽车单元测试是工程师在实验室里测试每一个活塞、齿轮。集成测试是把发动机装进底盘看能不能点火、漏不漏油。E2E 测试 (Playwright) 是试车员开着整车在跑道上跑一圈看这辆车能不能从起点顺利开到终点乘客坐得舒不舒服。// E2E 测试模拟用户操作test(用户创建零件,async({page}){// 1. 打开网页await page.goto(http://localhost:5173/pdm/parts);// 2. 点击新建按钮await page.click(button:has-text(新建));// 3. 填写表单await page.fill(input[namename], 测试零件);// 4. 点击保存await page.click(button:has-text(保存));// 5. 验证成功提示出现了吗awaitexpect(page.locator(.success-message)).toBeVisible();});前端例子part-crud.spec.tsE2E 测试属于集成测试test(创建零件并验证编号自动生成,async({page}){// 1. 登录真实调用后端 APIawaitloginAsAdmin(page);// 2. 打开零件列表页真实渲染 Vue 组件await page.goto(http://localhost:5173/pdm/parts);// 3. 点击新建按钮await page.locator(button:has-text(新建)).click();// 4. 填写表单await page.locator(input[placeholder*名称]).fill(E2E测试零件);// 5. 提交真实发送 POST /api/parts 请求await page.locator(button:has-text(确定)).click();// 6. 验证成功提示awaitexpect(page.locator(.el-message--success)).toBeVisible();// 7. 验证列表中出现新零件awaitexpect(page.locator(td:has-text(E2E测试零件))).toBeVisible();});对比总结我的项目中的测试最佳实践

相关新闻

Win11下WSL2安装配置与性能优化指南

Win11下WSL2安装配置与性能优化指南

1. Win11与WSL2环境概述在Windows 11上运行Linux环境的需求近年来显著增长,这主要源于开发者对跨平台工具链的依赖以及云计算、容器化技术的普及。传统解决方案如双系统或虚拟机存在性能损耗大、资源占用高的问题,而WSL2(Windows Subsystem f…

2026/7/17 19:28:17 阅读更多 →
如何在macOS上快速配置notepad--国产跨平台文本编辑器

如何在macOS上快速配置notepad--国产跨平台文本编辑器

如何在macOS上快速配置notepad--国产跨平台文本编辑器 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- notepad--是一款…

2026/7/17 19:26:16 阅读更多 →
RabbitMQ-第五章:RabbitMQ的面试题

RabbitMQ-第五章:RabbitMQ的面试题

目录 1.什么是RabbitMQ? 2.RabbitMQ可以做什么? 3.在RabbitMQ中怎么保证消息的顺序问题。就比如我有A,B,C三个消息。我必须要按照A,B,C进行消费? 4.RabbitMQ怎么保证不会重复消费&#xff1f…

2026/7/17 19:22:15 阅读更多 →

最新新闻

Petalinux应用自启动与QSPI+eMMC双介质启动实战指南

Petalinux应用自启动与QSPI+eMMC双介质启动实战指南

在嵌入式Linux开发中,Petalinux作为Xilinx平台的重要工具链,其应用自启动和双介质启动配置是项目落地的关键环节。很多开发者在从SD卡调试转向QSPI Flash和eMMC双介质启动时,常遇到系统无法正常引导、应用服务启动失败等问题。本文将以ZynqMP…

2026/7/17 20:12:35 阅读更多 →
Python游客行为分析:Django+Scrapy数据可视化全栈项目实战

Python游客行为分析:Django+Scrapy数据可视化全栈项目实战

这次我们来看一个完整的Python游客行为分析可视化项目,这个项目结合了Django框架、Scrapy爬虫、数据分析和可视化技术,非常适合作为计算机专业毕业设计或实际应用开发。 这个项目的核心价值在于它提供了一个从数据采集到分析展示的完整解决方案。使用Sc…

2026/7/17 20:12:35 阅读更多 →
MiniMax算法与Agent系统的技术演进及应用

MiniMax算法与Agent系统的技术演进及应用

1. 项目概述:对话MiniMax择因的技术本质这个标题背后探讨的是当前人工智能领域最前沿的Agent技术发展路径。作为从业者,我理解这实际上是在讨论三个关键命题:第一,MiniMax这类新型AI架构的技术原理;第二,Ag…

2026/7/17 20:10:34 阅读更多 →
HarmonyOS掌上记账APP开发实践第29篇:条件渲染与 ForEach — 动态 UI 的构建策略

HarmonyOS掌上记账APP开发实践第29篇:条件渲染与 ForEach — 动态 UI 的构建策略

条件渲染与 ForEach — 动态 UI 的构建策略 一、引言 动态 UI 是现代应用开发的核心需求——不同状态展示不同内容,列表数据动态填充。鸿蒙 ArkTS 提供了 if/else 条件渲染和 ForEach 循环渲染两种声明式渲染控制能力,帮助开发者高效构建动态界面。Mon…

2026/7/17 20:06:33 阅读更多 →
HarmonyOS掌上记账APP开发实践第28篇:自定义组件封装策略 — 从通用 Header 到业务组件的分层设计

HarmonyOS掌上记账APP开发实践第28篇:自定义组件封装策略 — 从通用 Header 到业务组件的分层设计

自定义组件封装策略 — 从通用 Header 到业务组件的分层设计 一、引言 在大型应用中,合理的组件化设计是保证代码可维护性和复用性的基石。鸿蒙的 ArkTS 通过 ComponentV2 装饰器支持自定义组件,允许开发者将页面拆分为可复用的独立模块。MoneyTrack 项…

2026/7/17 20:06:33 阅读更多 →
【关注可白嫖源码】--课程设计--毕业设计--springboot中老年乙肝肝硬化健康管理系统[编号:project14504](案件分析)

【关注可白嫖源码】--课程设计--毕业设计--springboot中老年乙肝肝硬化健康管理系统[编号:project14504](案件分析)

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 摘 要 本项…

2026/7/17 20:04:32 阅读更多 →

日新闻

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

2026/7/17 0:02:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

2026/7/17 0:02:10 阅读更多 →
2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

现在很多用户都需要一款能适配多场景的键盘,既能满足交流码字的需求,又能应对居家电竞的性能需求,最好还得有点小颜值。而大多键盘都只能兼顾其中一两个场景。这次我实测了IQUNIX EV63三款配色(银武士、黑武士、紫罗兰&#xff09…

2026/7/17 0:04:10 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/17 3:22:28 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/17 3:01:28 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/16 23:40:37 阅读更多 →

月新闻