Skill: davieyang/springboot-unit-testing (version 1.0.0)

--- 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层测试模板 ```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. **静态测试数据**: 使用 `@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. 事务测试 ```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. **事务不回滚**: 检查 `@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初始化 ## 参考资源 ### 核心文档 - [测试依赖配置](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项目的单元测试更专业、更全面、更高效！**


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)