mcpField
G
generate-tests

generate-tests

github.com/mavka-ai测试与质量70181 次安装5 周前更新
代码仓库

关于 generate-tests

generate-tests 是分析目标代码并生成单元测试的技能,重点覆盖 Java 项目。它要求先检查依赖和已有测试、梳理代码分支,再编译并运行生成的测试。

主要功能

  1. 01读取项目规则与源码依赖
  2. 02检查已有测试及项目惯例
  3. 03规划覆盖代码分支的用例
  4. 04为不同 Java 代码类型生成测试
  5. 05编译并执行生成的测试

适用场景

  1. 01为 Java 类或方法补充测试
  2. 02扩展现有测试类
  3. 03依据项目构建结果验证生成的测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mavka-ai/unit-tests-skills --skill generate-tests

安装后在 Claude Code 中输入/generate-tests确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

rules/tests/general/
cleanly-create-test-data.md
code-context-analysis.md
existing-test-awareness.md
general-principles.md
keep-cause-effect-clear.md
keep-tests-focused.md
naming-conventions.md
no-logic-in-tests.md
prefer-public-apis.md
technology-stack-detection.md
test-behaviors-not-methods.md
test-case-generation-strategy.md
verify-relevant-arguments-only.md
what-makes-good-test.md
rules/tests/java/unit/
argument-matching.md
controller-test-rules.md
domain-service-rules.md
java-test-template.md
json-serialization.md
logging-rules.md
rules/tests/post-generation/
compilation-verification.md
test-execution-verification.md

详细介绍

生成测试技能

你将分析代码,并为指定目标生成高质量的单元测试。

测试目标: $ARGUMENTS

质量标准

  • 生成测试用例前,请花时间彻底分析代码。
  • 质量比速度更重要——仔细阅读所有相关源文件和规则。
  • 请勿跳过以下工作流中的任何步骤。每个步骤都有其理由。
  • 请勿在测试数据上走捷径——请阅读实际的类,以使用正确的构造函数和字段。

说明

步骤 1:阅读规则并分析上下文
  1. 根据代码类型,从 ./rules/tests/ 中阅读相关规则(参见下方的规则参考)
  2. 阅读目标源文件/类/方法
  3. 阅读依赖项:根据目标中的导入,阅读 DTO、实体、枚举、自定义异常和目标引用的其他类型(按 code-context-analysis 规则的要求)
  4. 检查现有测试:在测试目录中搜索 {ClassName}Test 或 {ClassName}Tests(按 existing-test-awareness 规则的要求)
    • 如果找到,请完整阅读——在其中补充缺少的测试,而不是新建文件
    • 如果未找到,请查看 2-3 个相邻的测试类,了解项目约定
步骤 2:确定测试用例列表

如果该目标已有测试用例列表——无论用户还是 Agent 是否调用了 generate-test-cases,该列表就是计划。请据此生成测试。不要从头重新分析目标;如果你阅读代码后的理解与列表不符,请说明新增或删除了哪些用例以及原因,以便清楚地看到计划的变更。

如果没有此类列表,请在编写任何测试代码前,在此处生成一份:

  1. 分析所有代码分支,包括:
    • 成功路径
    • 错误/异常路径
    • 验证逻辑
    • 目标调用的私有/受保护方法
    • 安全注解(如有)
  2. 严格遵循包含/排除规则
  3. 按以下格式输出列表

无论哪种情况,都请直接继续步骤 3。输出此列表是为了让用户之后能够核对计划与生成的测试;整个运行过程将从头到尾自动执行。

测试用例输出格式
## Test Cases for {ClassName}.{methodName}

### 1. {testMethodName}
- **Given:** {preconditions/input state}
- **When:** {action being tested}
- **Then:** {expected outcome}
- **Code branch:** {which code path this covers}

### 2. {testMethodName}
...
命名约定

测试方法名称格式:{testedMethod}_{givenState}_{expectedOutcome}

示例:

  • calculateTotal_validProducts_returnsSum
  • calculateTotal_emptyList_throwsIllegalArgumentException
  • getUser_unauthorized_returns401
步骤 3:生成测试代码
  1. 确定代码类型并应用相应规则:
    • Controller → 应用 controller-test-rules.md(使用 @WebMvcTest、MockMvc 模式)
    • 服务/领域逻辑 → 应用 domain-service-rules.md(使用 @ExtendWith(MockitoExtension.class)、Mockito 模式)
    • Repository/消息传递/其他类型 → 将 domain-service-rules.md 用作基础规则;告知用户目前尚无特定于该类型的规则
    • 所有 Java 代码 → 无论代码类型为何,始终应用 java-test-template.md、argument-matching.md、json-serialization.md
  2. 如果在步骤 1 中找到现有测试类,请向其中添加新的测试方法(不要创建重复文件)
  3. 按照所有规则和步骤 2 中的测试用例生成测试
  4. 使用 Write 工具创建或更新测试文件
步骤 4:验证编译和执行
  1. 运行编译并修复所有问题(最多尝试 5 次——参见 compilation-verification.md)
  2. 运行生成的测试类,验证所有测试均通过(参见 test-execution-verification.md)
  3. 修改测试以修复任何失败的测试——保持生产代码不变
  4. 如果测试经过 3 次尝试仍无法修复,请保留该测试,并使用 @Disabled 标记,注明原因并报告(参见 test-execution-verification.md)

故障排除

找不到目标文件

如果指定的目标不存在,请告知用户你搜索的准确路径,并请求澄清。

不支持的语言

如果目标代码使用的语言没有专门规则(非 Java),则仅应用通用规则,并告知用户可能需要手动检查语言特定的约定。

编译持续失败

如果尝试 5 次后编译仍然失败:

  1. 停止并向用户展示剩余错误
  2. 建议可能的原因(缺少依赖项、版本不兼容)
  3. 请用户先解决构建问题,再继续
测试因生产代码行为而失败

如果测试因生产代码的行为与预期不同而失败:

  1. 不要修改生产代码
  2. 修改测试,使其符合实际行为
  3. 如果该行为似乎是个 bug,请添加注释:// NOTE: current behavior may be a bug — {description}

示例

User says: "/generate-tests src/main/java/com/example/service/OrderService.java"

Step 1: Agent reads rules, reads OrderService.java, reads OrderRequest.java,
        Order.java, OrderRepository.java (dependencies), checks for
        existing OrderServiceTest.java

Step 2: Agent outputs 7 test cases covering:
        - createOrder success path
        - createOrder with invalid request (validation)
        - processPayment success
        - processPayment failure
        - calculateTotal with products
        - calculateTotal with empty list
        - cancelOrder for non-existent order

Step 3: Agent generates OrderServiceTest.java with @ExtendWith(MockitoExtension.class),
        mocked repository and payment service, 7 test methods.

Step 4: Agent runs `mvn test -Dtest=OrderServiceTest -q`, all tests pass.

Result: Complete test file delivered with 7 passing tests.

规则参考

重要:必须阅读并应用 ./rules/tests/ 目录中的所有相关规则。

维护说明: ./rules/tests/general/ 中的通用规则与 generate-test-cases 技能共享(该技能在 rules/general/ 中有副本)。更新规则时,请确保两个位置保持同步。

通用规则(始终应用)
  • general/test-case-generation-strategy.md - 包含/排除标准
  • general/naming-conventions.md - 测试命名格式
  • general/general-principles.md - 核心测试原则(Given-When-Then、实际值/预期值)
  • general/technology-stack-detection.md - 检测语言和框架
  • general/what-makes-good-test.md - 清晰性、完整性、简洁性、稳健性
  • general/cleanly-create-test-data.md - 使用辅助工具和构建器创建测试数据
  • general/keep-cause-effect-clear.md - 效果应紧接原因出现
  • general/no-logic-in-tests.md - KISS > DRY,避免在断言中编写逻辑
  • general/keep-tests-focused.md - 每个测试只覆盖一种场景
  • general/test-behaviors-not-methods.md - 针对不同的行为编写独立测试
  • general/verify-relevant-arguments-only.md - 仅验证相关的模拟参数
  • general/prefer-public-apis.md - 测试公开 API,而非私有方法
  • general/existing-test-awareness.md - 检查现有测试,并遵循项目约定
  • general/code-context-analysis.md - 编写测试前先阅读依赖项
Java 单元测试
  • java/unit/java-test-template.md - 基本模板、禁止使用的注解
  • java/unit/json-serialization.md - 使用显式 JSON 字面量
  • java/unit/argument-matching.md - 使用 ArgumentCaptor,而非 any()
  • java/unit/logging-rules.md - 使用 OutputCaptureExtension 捕获日志
  • java/unit/domain-service-rules.md - 服务的 Mockito 模式
  • java/unit/controller-test-rules.md - 控制器的 @WebMvcTest 和 MockMvc 模式
生成后
  • post-generation/compilation-verification.md - 验证编译
  • post-generation/test-execution-verification.md - 验证测试通过

评论

支持 Markdown