springboot-unit-testing
by @davieyang
专业的Spring Boot + MyBatis + MySQL项目单元测试技能,提供全面的测试覆盖策略。 当用户需要为Spring Boot项目编写单元测试时使用此技能,特别是包含: - 完整的正常流程测试 - 充分的异常场景测试 - 全面的边界值测试 - MyBatis Mapper层测试 - Service...
clawhub install springboot-unit-testing📖 About This Skill
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 获取完整的测试依赖配置。2. 测试结构
@MybatisTest + H2内存数据库@ExtendWith(MockitoExtension.class) + Mock依赖@WebMvcTest + MockMvc@SpringBootTest + Testcontainers3. 测试覆盖率目标
核心测试策略
正常流程测试 (Normal Flow Testing)
每个业务方法都需要以下测试:异常流程测试 (Exception Flow Testing)
每个可能抛出的异常都需要:边界值测试 (Boundary Value Testing)
所有输入参数都需要边界测试:测试模板
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() {
// 权限验证测试
// 数据隔离测试
}
测试工具和最佳实践
断言选择指南
assertEquals()、assertThrows()assertThat() 链式调用assertThat() + MatcherMock使用指南
verify() 验证方法调用any(), eq(), argThat() 等when().thenThrow() 模拟异常测试生命周期
质量保证
代码覆盖率检查
# 生成覆盖率报告
mvn clean test jacoco:report检查覆盖率阈值
mvn jacoco:check
测试代码质量
测试命名规范
test[场景]_[条件]_[期望结果][Entity][Layer]TestTestDataFactorytest-[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 {
}
测试工具扩展
性能优化
@Tag 分组测试参考资源
核心文档
最佳实践
工具脚本
使用示例
当用户请求"为我的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 - 完整使用说明
发布准备检查清单
✅ 完整性检查
✅ 配置检查
✅ 质量检查
发布到ClawHub的步骤
1. 创建GitHub仓库(推荐)
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. 准备发布包
# 打包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项目的单元测试更专业、更全面、更高效!
📋 Tips & Best Practices
1. 事务不回滚: 检查 @Transactional 注解位置
2. Mock不生效: 检查 @MockBean 和 @Mock 的区别
3. 数据库连接失败: 检查H2数据库配置
4. 测试数据污染: 使用 @Transactional 或清理方法
调试技巧
logging.level.root=DEBUG@DirtiesContext 重置Spring上下文@TestPropertySource 覆盖配置MockMvc 的 andDo(print()) 打印请求详情