← 返回
未分类

springboot-unit-testing

专业的Spring Boot + MyBatis + MySQL项目单元测试技能,提供全面的测试覆盖策略。 当用户需要为Spring Boot项目编写单元测试时使用此技能,特别是包含: - 完整的正常流程测试 - 充分的异常场景测试 - 全面的边界值测试 - MyBatis Mapper层测试 - Service...
专业的Spring Boot + MyBatis + MySQL项目单元测试技能,提供全面的测试覆盖策略。当需要为Spring Boot项目编写单元测试时使用此技能,尤其涵盖:完整正常流程测试、充分异常场景测试、全面边界值测试、MyBatis Mapper层测试及Service层测试等。
davieyang davieyang 来源
未分类 clawhub v1.0.0 1 版本 100000 Key: 无需
★ 1
Stars
📥 582
下载
💾 0
安装
1
版本
#latest

概述

Spring Boot + MyBatis 单元测试专家

技能概述

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

  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层测试模板

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

Service层测试模板

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

Controller层测试模板

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

集成测试模板

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

测试数据管理

测试数据策略

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

测试数据工厂

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

SQL测试数据文件

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

特殊场景测试

1. 事务测试

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

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

2. 并发测试

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

3. 性能测试

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

4. 安全测试

@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: 清理测试环境

质量保证

代码覆盖率检查

# 生成覆盖率报告
mvn clean test jacoco:report

# 检查覆盖率阈值
mvn jacoco:check

测试代码质量

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

测试命名规范

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

故障排除

常见问题

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

调试技巧

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

扩展和定制

自定义测试注解

// 创建组合注解简化测试配置
@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初始化

参考资源

核心文档

最佳实践

工具脚本

使用示例

当用户请求"为我的Spring Boot项目编写单元测试"时:

  1. 分析项目结构 - 识别Entity、Mapper、Service、Controller
  2. 选择测试策略 - 根据需求选择正常/异常/边界测试
  3. 生成测试代码 - 使用模板生成对应层的测试
  4. 配置测试环境 - 设置依赖、数据、配置
  5. 验证测试覆盖 - 检查覆盖率,补充缺失测试

本技能确保为每个Spring Boot项目提供专业、全面、可维护的单元测试解决方案。


📦 发布信息

ClawHub发布配置

此Skill已配置为可发布到ClawHub的技能市场。包含以下发布文件:

  1. clawhub.yml - 发布配置文件
  2. package.json - 标准化包描述
  3. LICENSE - MIT许可证
  4. README.md - 完整使用说明

发布准备检查清单

完整性检查

  • [x] SKILL.md - 主技能文件
  • [x] README.md - 使用文档
  • [x] scripts/ - 3个实用脚本
  • [x] references/ - 4个参考文档
  • [x] examples/ - 2个示例测试代码
  • [x] assets/ - 资源文件夹

配置检查

  • [x] clawhub.yml - 发布配置
  • [x] package.json - 包管理
  • [x] LICENSE - 许可证文件

质量检查

  • [x] 测试策略文档齐全
  • [x] 代码示例完整可运行
  • [x] 工具脚本可用
  • [x] 依赖配置正确

发布到ClawHub的步骤

  1. 创建GitHub仓库(推荐)

```bash

git init

git add .

git commit -m "feat: Spring Boot单元测试Skill v1.0.0"

git remote add origin https://github.com/your-repo/springboot-unit-testing.git

git push -u origin main

```

  1. 准备发布包

```bash

# 打包Skill

tar -czf springboot-unit-testing-skill-v1.0.0.tar.gz test-skill/

# 或使用zip

zip -r springboot-unit-testing-skill-v1.0.0.zip test-skill/

```

  1. 发布到ClawHub
    • 访问ClawHub网站 (https://clawhub.com)
    • 注册/登录开发者账户
    • 创建新Skill发布
    • 填写Skill信息(参考clawhub.yml)
    • 上传打包文件
    • 设置分类标签:spring-boot, testing, java
    • 提交审核
  1. 维护和更新
    • 定期更新测试策略
    • 收集用户反馈
    • 发布新版本
    • 更新文档

Skill分类信息

  • 类别: 开发工具 / 测试框架
  • 技术栈: Spring Boot, MyBatis, MySQL, JUnit 5
  • 适用场景: 企业级Java项目单元测试
  • 难度级别: 中级(需要Java和Spring Boot基础)
  • 预估时间: 使用此Skill可减少50%的测试开发时间

用户支持

  • 文档: 完整的README和示例代码
  • 问题反馈: 通过GitHub Issues
  • 社区: 分享测试经验和最佳实践
  • 贡献: 欢迎提交PR改进Skill

版本历史

  • v1.0.0 (2026-03-20) - 初始发布
  • 完整的Spring Boot单元测试策略
  • 正常流程、异常测试、边界值测试全面覆盖
  • 3个实用工具脚本
  • 4个详细参考文档
  • 2个完整代码示例

让Spring Boot项目的单元测试更专业、更全面、更高效!

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-05-01 19:07 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

ai-agent

self-improving agent

pskoett
捕获经验教训、错误及修正内容,以实现持续改进。适用于以下场景:(1)命令或操作意外失败;(2)用户纠正Claude(如“不,那不对……”“实际上……”);(3)用户请求的功能不存在;(4)外部API或工具出现故障;(5)Claude发现自身
★ 4,085 📥 813,241
ai-agent

Skill Vetter

spclaudehome
AI智能体技能安全预审工具。安装ClawdHub、GitHub等来源技能前,检查风险信号、权限范围及可疑模式。
★ 1,229 📥 268,119
ai-agent

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,383 📥 320,808