HomeBrowseUpload
← Back to registry
// Skill profile

Spring Boot + MyBatis 单元测试专家

name: SpringBoot-MyBatis-UnitTesting

by davieyang · published 2026-03-22

开发工具数据处理
Total installs
0
Stars
★ 0
Last updated
2026-03
// Install command
$ claw add gh:davieyang/davieyang-springboot-unit-testing
View on GitHub
// Full documentation

---

name: SpringBoot-MyBatis-UnitTesting

version: 1.0.0

description: |

专业的Spring Boot + MyBatis + MySQL项目单元测试技能,提供全面的测试覆盖策略。

当用户需要为Spring Boot项目编写单元测试时使用此技能,特别是包含:

- 完整的正常流程测试

- 充分的异常场景测试

- 全面的边界值测试

- MyBatis Mapper层测试

- Service层业务逻辑测试

- Controller层API测试

- 集成测试和端到端测试

适用于:JUnit 5、Mockito、AssertJ、Hamcrest、H2数据库、Testcontainers等技术栈。

author: WorkBuddy User

license: MIT

repository: https://github.com/your-repo/springboot-unit-testing

tags: [spring-boot, mybatis, unit-testing, java, junit, mockito, mysql, testing]

---

# Spring Boot + MyBatis 单元测试专家

技能概述

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

1. **正常流程全面覆盖** - 所有业务逻辑都有对应的成功测试

2. **异常场景充分测试** - 各种错误情况和异常处理都有测试验证

3. **边界值完整验证** - 数据边界、参数边界、状态边界都有测试

4. **分层测试策略** - Mapper、Service、Controller各层都有专业测试方法

快速开始

1. Maven依赖配置

查看 [references/dependencies.md](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](references/test-data-factory.java) 获取测试数据工厂实现。

    SQL测试数据文件

    查看 [references/test-data-examples.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` 覆盖配置
  • 使用 `MockMvc` 的 `andDo(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初始化
  • 参考资源

    核心文档

  • [测试依赖配置](references/dependencies.md) - Maven依赖和配置
  • [测试模板代码](references/) - 各层测试模板
  • [测试数据示例](references/test-data-examples.sql) - SQL测试数据
  • [测试工厂模式](references/test-data-factory.java) - 数据工厂实现
  • 最佳实践

  • [测试策略指南](references/testing-strategies.md) - 详细测试策略
  • [异常测试模式](references/exception-patterns.md) - 异常测试模式
  • [边界测试方法](references/boundary-testing.md) - 边界测试方法
  • [性能测试指南](references/performance-testing.md) - 性能测试指南
  • 工具脚本

  • [测试覆盖率脚本](scripts/check-coverage.sh) - 检查覆盖率脚本
  • [测试数据生成器](scripts/generate-test-data.py) - 生成测试数据
  • [测试报告生成器](scripts/generate-test-report.py) - 生成测试报告
  • 使用示例

    当用户请求"为我的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

    ```

    2. **准备发布包**

    ```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/

    ```

    3. **发布到ClawHub**

    - 访问ClawHub网站 (https://clawhub.com)

    - 注册/登录开发者账户

    - 创建新Skill发布

    - 填写Skill信息(参考clawhub.yml)

    - 上传打包文件

    - 设置分类标签:spring-boot, testing, java

    - 提交审核

    4. **维护和更新**

    - 定期更新测试策略

    - 收集用户反馈

    - 发布新版本

    - 更新文档

    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项目的单元测试更专业、更全面、更高效!**

    // Comments
    Sign in with GitHub to leave a comment.
    // Related skills

    More tools from the same signal band