返回顶部
S

SpringBoot-MyBatis-UnitTesting SpringBoot单元测试

|

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
171
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

SpringBoot-MyBatis-UnitTesting

Spring Boot + MyBatis 单元测试专家

技能概述

本技能提供Spring Boot + MyBatis + MySQL项目的专业单元测试解决方案,确保:

  1. 1. 正常流程全面覆盖 - 所有业务逻辑都有对应的成功测试
  2. 异常场景充分测试 - 各种错误情况和异常处理都有测试验证
  3. 边界值完整验证 - 数据边界、参数边界、状态边界都有测试
  4. 分层测试策略 - Mapper、Service、Controller各层都有专业测试方法

快速开始

1. Maven依赖配置

查看 references/dependencies.md 获取完整的测试依赖配置。

2. 测试结构

  • - Mapper层: 使用 @MybatisTest + H2内存数据库
  • Service层: 使用 @ExtendWith(MockitoExtension.class) + Mock依赖
  • Controller层: 使用 @WebMvcTest + MockMvc
  • 集成测试: 使用 @SpringBootTest + Testcontainers

3. 测试覆盖率目标

  • - Mapper层: 90%+ (覆盖所有SQL语句)
  • Service层: 95%+ (覆盖所有业务逻辑分支)
  • Controller层: 85%+ (覆盖所有API端点)
  • 异常测试: 100% (所有异常处理逻辑)
  • 边界测试: 100% (所有边界条件)

核心测试策略

正常流程测试 (Normal Flow Testing)

每个业务方法都需要以下测试:
  • - 成功场景测试: 验证方法在理想条件下的行为
  • 多数据测试: 测试不同数据组合下的表现
  • 状态转换测试: 验证状态机的正确转换
  • 并发安全测试: 确保线程安全(如果适用)

异常流程测试 (Exception Flow Testing)

每个可能抛出的异常都需要:
  • - 参数验证异常: 测试无效参数的异常处理
  • 业务逻辑异常: 测试业务规则违反的异常
  • 数据不存在异常: 测试查询不到数据的异常
  • 并发异常: 测试并发冲突的异常处理
  • 外部依赖异常: 测试外部服务失败的异常

边界值测试 (Boundary Value Testing)

所有输入参数都需要边界测试:
  • - 数值边界: 最小/最大/临界值测试
  • 字符串边界: 空/null/最大长度/特殊字符测试
  • 集合边界: 空集合/单元素/最大容量测试
  • 时间边界: 最小/最大时间/时区边界测试
  • 状态边界: 初始/中间/最终状态测试

测试模板

Mapper层测试模板

java // 查看完整模板: references/mapper-test-template.java @MybatisTest @AutoConfigureTestDatabase(replace = Replace.NONE) @Sql(/test-data.sql) class [Entity]MapperTest { // CRUD操作测试 // 复杂查询测试 // 事务边界测试 // 性能边界测试 }

Service层测试模板

java // 查看完整模板: references/service-test-template.java @ExtendWith(MockitoExtension.class) class [Entity]ServiceTest { // 业务逻辑测试 // 异常处理测试 // 事务管理测试 // 并发安全测试 }

Controller层测试模板

java // 查看完整模板: references/controller-test-template.java @WebMvcTest([Entity]Controller.class) class [Entity]ControllerTest { // HTTP方法测试 // 请求参数测试 // 响应格式测试 // 错误处理测试 }

集成测试模板

java // 查看完整模板: references/integration-test-template.java @SpringBootTest @AutoConfigureMockMvc @Transactional class [Feature]IntegrationTest { // 端到端流程测试 // 数据一致性测试 // 性能基准测试 // 安全边界测试 }

测试数据管理

测试数据策略

  1. 1. 静态测试数据: 使用 @Sql 注解导入SQL文件
  2. 动态测试数据: 使用Builder模式创建测试对象
  3. 随机测试数据: 使用Faker库生成随机数据
  4. 边界测试数据: 专门测试边界条件的数据

测试数据工厂

查看 references/test-data-factory.java 获取测试数据工厂实现。

SQL测试数据文件

查看 references/test-data-examples.sql 获取测试SQL示例。

特殊场景测试

1. 事务测试

java @Test @Transactional(propagation = Propagation.NEVER) void testTransactionRollback() { // 测试事务回滚 }

@Test
void testTransactionPropagation() {
// 测试事务传播
}

2. 并发测试

java @Test void testConcurrentAccess() throws InterruptedException { // 使用CountDownLatch或CompletableFuture测试并发 }

3. 性能测试

java @Test @Timeout(5) // 5秒超时 void testPerformanceBoundary() { // 性能边界测试 }

4. 安全测试

java @Test void testSecurityConstraints() { // 权限验证测试 // 数据隔离测试 }

测试工具和最佳实践

断言选择指南

  • - 基本断言: 使用JUnit 5的 assertEquals()、assertThrows()
  • 流式断言: 使用AssertJ的 assertThat() 链式调用
  • 匹配器断言: 使用Hamcrest的 assertThat() + Matcher
  • 自定义断言: 创建领域特定的断言方法

Mock使用指南

  • - 最小化Mock: 只Mock外部依赖
  • 验证调用: 使用 verify() 验证方法调用
  • 参数匹配: 使用 any(), eq(), argThat() 等
  • 异常模拟: 使用 when().thenThrow() 模拟异常

测试生命周期

  • - @BeforeEach: 准备测试数据
  • @AfterEach: 清理测试数据
  • @BeforeAll: 初始化测试环境
  • @AfterAll: 清理测试环境

质量保证

代码覆盖率检查

bash

生成覆盖率报告

mvn clean test jacoco:report

检查覆盖率阈值

mvn jacoco:check

测试代码质量

  • - 可读性: 测试代码应该像文档一样清晰
  • 可维护性: 避免重复代码,使用工厂模式
  • 可执行性: 测试应该快速执行,独立运行
  • 可调试性: 提供清晰的失败信息

测试命名规范

  • - 方法名: test[场景][条件][期望结果]
  • 测试类: [Entity][Layer]Test
  • 数据工厂: TestDataFactory
  • 测试文件: test-[feature].sql

故障排除

常见问题

  1. 1. 事务不回滚: 检查 @Transactional 注解位置
  2. Mock不生效: 检查 @MockBean 和 @Mock 的区别
  3. 数据库连接失败: 检查H2数据库配置
  4. 测试数据污染: 使用 @Transactional 或清理方法

调试技巧

  • - 启用详细日志: logging.level.root=DEBUG
  • 使用 @DirtiesContext 重置Spring上下文
  • 使用 @TestPropertySource 覆盖配置
  • 使用 MockMvc 的 andDo(print()) 打印请求详情

扩展和定制

自定义测试注解

java // 创建组合注解简化测试配置 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @MybatisTest @AutoConfigureTestDatabase @Sql(/test-data.sql) public @interface MybatisIntegrationTest { }

测试工具扩展

  • - 自定义Matcher: 创建领域特定的Matcher
  • 测试监听器: 实现TestExecutionListener
  • 自定义Runner: 扩展SpringJUnit4ClassRunner
  • 测试扩展: 实现Extension接口

性能优化

  • - 测试分组: 使用 @Tag 分组测试
  • 并行执行: 配置Maven Surefire并行执行
  • 数据库优化: 使用H2内存数据库模式
  • Mock优化: 避免不必要的Mock初始化

参考资源

核心文档

最佳实践

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 springboot-unit-testing-1776122896 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 springboot-unit-testing-1776122896 技能

通过命令行安装

skillhub install springboot-unit-testing-1776122896

下载

⬇ 下载 SpringBoot-MyBatis-UnitTesting v1.0.0(免费)

文件大小: 61.88 KB | 发布时间: 2026-4-14 13:02

v1.0.0 最新 2026-4-14 13:02
SpringBoot-MyBatis-UnitTesting v1.0.0

- 首次发布,提供Spring Boot + MyBatis + MySQL项目的专业单元测试解决方案
- 涵盖Mapper、Service、Controller等多层次全面的测试模板和策略
- 支持正常流程、异常场景、边界值、集成及端到端测试,适配JUnit 5、Mockito等主流测试技术
- 提供测试数据工厂、SQL示例、工具脚本及详细文档
- 包含CI覆盖率、测试命名规范、常见问题与最佳实践
- 配套发布与维护指南,支持ClawHub平台发布

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部