@chongyan/autospec 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.en.md +447 -321
- package/README.md +418 -286
- package/knowledge/01-principles/00-principles-hierarchy.md +247 -0
- package/knowledge/01-principles/01-first-principles.md +241 -0
- package/knowledge/01-principles/02-strategic-principles.md +286 -0
- package/knowledge/01-principles/03-tactical-principles.md +385 -0
- package/knowledge/01-principles/04-operational-principles.md +275 -0
- package/knowledge/01-principles/05-domain-principles.md +539 -0
- package/knowledge/01-principles/06-methodology-principles.md +281 -0
- package/knowledge/01-principles/07-cognitive-principles.md +277 -0
- package/knowledge/01-principles/08-auto-fix-principles.md +320 -0
- package/knowledge/01-principles/09-constitution.md +220 -0
- package/knowledge/{principles/evolution.md → 01-principles/10-evolution-mechanism.md} +160 -14
- package/knowledge/01-principles/README.en.md +385 -0
- package/knowledge/01-principles/README.md +385 -0
- package/knowledge/{process/overview.md → 02-process/00-overview.md} +90 -5
- package/knowledge/02-process/README.en.md +143 -0
- package/knowledge/02-process/README.md +186 -0
- package/knowledge/{guides/support/pipeline-protocol.md → 03-guides/00-pipeline-protocol.md} +10 -10
- package/knowledge/{guides/support/team-orchestrator.md → 03-guides/01-team-orchestrator.md} +53 -8
- package/knowledge/{guides/stages/requirement-analyzer.md → 03-guides/02-analyze-requirement.md} +3 -3
- package/knowledge/{guides/stages/ai-effect-evaluator.md → 03-guides/08-evaluate-ai-effect.md} +14 -7
- package/knowledge/{guides/support/skill-distiller.md → 03-guides/19-distill-skill.md} +3 -3
- package/knowledge/{guides/support/skill-updater.md → 03-guides/20-update-skill.md} +1 -1
- package/knowledge/{guides/support/methodology-extractor.md → 03-guides/22-extract-methodology.md} +2 -2
- package/knowledge/{guides/support/complexity-assessor.md → 03-guides/24-assess-complexity.md} +6 -4
- package/knowledge/{guides/support/tech-stack-analyzer.md → 03-guides/26-analyze-tech-stack.md} +1 -1
- package/knowledge/{guides/domain-driven-design.md → 03-guides/42-apply-ddd.md} +1 -1
- package/knowledge/{process/ai-sdlc.md → 03-guides/43-run-ai-sdlc.md} +1 -1
- package/knowledge/{guides/knowledge-management.md → 03-guides/44-manage-knowledge.md} +4 -4
- package/knowledge/03-guides/README.en.md +212 -0
- package/knowledge/03-guides/README.md +212 -0
- package/knowledge/{checklists/requirement.md → 04-checklists/00-requirement.md} +1 -1
- package/knowledge/{checklists/design.md → 04-checklists/01-design.md} +1 -1
- package/knowledge/{checklists/code.md → 04-checklists/02-code.md} +16 -1
- package/knowledge/{checklists/release.md → 04-checklists/04-release.md} +1 -1
- package/knowledge/04-checklists/README.en.md +119 -0
- package/knowledge/04-checklists/README.md +123 -0
- package/knowledge/{config/validation-patterns.yaml → 05-config/00-validation-patterns.yaml} +1 -1
- package/knowledge/{config/team-tasks.yaml → 05-config/02-team-tasks.yaml} +2 -2
- package/knowledge/05-config/03-role-composition.yaml +346 -0
- package/knowledge/{config/skill-compositions.yaml → 05-config/05-skill-compositions.yaml} +24 -24
- package/knowledge/05-config/README.en.md +54 -0
- package/knowledge/05-config/README.md +132 -0
- package/knowledge/06-environment/00-template-registry.md +310 -0
- package/knowledge/06-environment/01-detection-patterns.yaml +1692 -0
- package/knowledge/{environment → 06-environment}/README.en.md +4 -0
- package/knowledge/{environment → 06-environment}/README.md +66 -25
- package/knowledge/{standards/coding-style.md → 07-standards/00-coding-style.md} +123 -4
- package/knowledge/{standards/code-review.md → 07-standards/01-code-review.md} +3 -3
- package/knowledge/{standards/data-consistency.md → 07-standards/02-data-consistency.md} +1 -1
- package/knowledge/{standards/document-versioning.md → 07-standards/03-document-versioning.md} +1 -1
- package/knowledge/{standards/risk-detection.md → 07-standards/04-risk-detection.md} +5 -5
- package/knowledge/07-standards/README.en.md +119 -0
- package/knowledge/07-standards/README.md +123 -0
- package/knowledge/08-organization/00-vision-mission.md +113 -0
- package/knowledge/{organization/ai-native-team.md → 08-organization/01-ai-native-culture.md} +1 -1
- package/knowledge/{organization/team-metrics.md → 08-organization/02-team-metrics.md} +1 -1
- package/knowledge/08-organization/03-committee-structure.md +54 -0
- package/knowledge/08-organization/04-governance-metrics.md +55 -0
- package/knowledge/08-organization/05-improvement-process.md +71 -0
- package/knowledge/08-organization/README.en.md +165 -0
- package/knowledge/08-organization/README.md +165 -0
- package/knowledge/09-templates/00-requirement-proposal.md +344 -0
- package/knowledge/09-templates/01-architecture-design.md +494 -0
- package/knowledge/09-templates/02-api-design.md +408 -0
- package/knowledge/09-templates/03-database-design.md +313 -0
- package/knowledge/09-templates/04-product-design.md +237 -0
- package/knowledge/09-templates/05-domain-business.md +388 -0
- package/knowledge/09-templates/06-test-design.md +268 -0
- package/knowledge/09-templates/07-evaluation-design.md +372 -0
- package/knowledge/09-templates/08-component-knowledge.md +272 -0
- package/knowledge/09-templates/09-best-practices.md +218 -0
- package/knowledge/{environment/middleware-knowledge.md → 09-templates/10-middleware-knowledge.md} +106 -1
- package/knowledge/09-templates/README.en.md +222 -0
- package/knowledge/09-templates/README.md +216 -0
- package/knowledge/README.en.md +372 -0
- package/knowledge/README.md +354 -99
- package/package.json +1 -1
- package/plugins/.claude-plugin/plugin.json +460 -81
- package/plugins/agents/roles/ceo.md +1 -1
- package/plugins/agents/roles/product-owner.md +1 -1
- package/plugins/agents/roles/tech-lead.md +1 -1
- package/plugins/agents/support/consistency-checker.md +36 -3
- package/plugins/agents/support/monitoring-agent.md +215 -0
- package/plugins/agents/support/safety-auditor.md +2 -2
- package/plugins/agents/support/stage-gate-evaluator.md +95 -11
- package/plugins/agents/support/test-coverage-reviewer.md +1 -1
- package/plugins/benchmarks/templates/README.md +165 -13
- package/plugins/benchmarks/templates/commands/apply-template.yaml +108 -0
- package/plugins/benchmarks/templates/commands/archive-template.yaml +65 -0
- package/plugins/benchmarks/templates/commands/env-export-template.yaml +64 -0
- package/plugins/benchmarks/templates/commands/env-sync-template.yaml +104 -0
- package/plugins/benchmarks/templates/commands/env-template-template.yaml +96 -0
- package/plugins/benchmarks/templates/commands/env-template.yaml +58 -0
- package/plugins/benchmarks/templates/commands/env-update-template.yaml +110 -0
- package/plugins/benchmarks/templates/commands/env-validate-template.yaml +95 -0
- package/plugins/benchmarks/templates/commands/field-evolve-template.yaml +104 -0
- package/plugins/benchmarks/templates/commands/project-evolve-template.yaml +104 -0
- package/plugins/benchmarks/templates/commands/propose-template.yaml +88 -0
- package/plugins/benchmarks/templates/commands/review-template.yaml +124 -0
- package/plugins/benchmarks/templates/commands/run-template.yaml +127 -0
- package/plugins/benchmarks/templates/commands/test-template.yaml +149 -0
- package/plugins/benchmarks/templates/pipeline/experiment-template.yaml +92 -0
- package/plugins/benchmarks/templates/pipeline/hotfix-template.yaml +81 -0
- package/plugins/benchmarks/templates/skills/agile-iteration-template.yaml +78 -0
- package/plugins/benchmarks/templates/skills/benchmark-executor-template.yaml +114 -0
- package/plugins/benchmarks/templates/skills/benchmark-generator-template.yaml +52 -0
- package/plugins/benchmarks/templates/skills/delivery-stage-template.yaml +130 -0
- package/plugins/benchmarks/templates/skills/design-stage-template.yaml +131 -0
- package/plugins/benchmarks/templates/skills/experiment-iteration-template.yaml +60 -0
- package/plugins/benchmarks/templates/skills/exploration-phase-template.yaml +114 -0
- package/plugins/benchmarks/templates/skills/field-evolve-analyzer-template.yaml +51 -0
- package/plugins/benchmarks/templates/skills/field-evolve-distiller-template.yaml +34 -0
- package/plugins/benchmarks/templates/skills/field-evolve-executor-template.yaml +50 -0
- package/plugins/benchmarks/templates/skills/field-evolve-fixer-template.yaml +52 -0
- package/plugins/benchmarks/templates/skills/field-evolve-learner-template.yaml +33 -0
- package/plugins/benchmarks/templates/skills/field-evolve-scanner-template.yaml +74 -0
- package/plugins/benchmarks/templates/skills/field-evolve-template.yaml +71 -0
- package/plugins/benchmarks/templates/skills/field-evolve-verifier-template.yaml +51 -0
- package/plugins/benchmarks/templates/skills/hotfix-iteration-template.yaml +54 -0
- package/plugins/benchmarks/templates/skills/implementation-stage-template.yaml +127 -0
- package/plugins/benchmarks/templates/skills/layer1-validation-template.yaml +121 -0
- package/plugins/benchmarks/templates/skills/project-evolve-analyzer-template.yaml +51 -0
- package/plugins/benchmarks/templates/skills/project-evolve-fixer-template.yaml +52 -0
- package/plugins/benchmarks/templates/skills/project-evolve-generator-template.yaml +34 -0
- package/plugins/benchmarks/templates/skills/project-evolve-learner-template.yaml +50 -0
- package/plugins/benchmarks/templates/skills/project-evolve-reviewer-template.yaml +50 -0
- package/plugins/benchmarks/templates/skills/project-evolve-scanner-template.yaml +75 -0
- package/plugins/benchmarks/templates/skills/project-evolve-template.yaml +72 -0
- package/plugins/benchmarks/templates/skills/project-evolve-verifier-template.yaml +51 -0
- package/plugins/benchmarks/templates/skills/skill-forge-template.yaml +117 -0
- package/plugins/benchmarks/templates/skills/startup-guard-template.yaml +103 -0
- package/plugins/benchmarks/templates/skills/testing-stage-template.yaml +146 -0
- package/plugins/benchmarks/templates/skills/waterfall-iteration-template.yaml +55 -0
- package/plugins/commands/README.en.md +2 -2
- package/plugins/commands/README.md +2 -2
- package/plugins/commands/apply.md +102 -16
- package/plugins/commands/archive.md +60 -4
- package/plugins/commands/env-sync.md +1047 -406
- package/plugins/commands/env-template.md +11 -135
- package/plugins/commands/env-update.md +1 -1
- package/plugins/commands/env-validate.md +3 -3
- package/plugins/commands/explore.md +118 -1
- package/plugins/commands/field-evolve.md +51 -175
- package/plugins/commands/project-evolve.md +167 -68
- package/plugins/commands/propose.md +97 -6
- package/plugins/commands/review.md +5 -5
- package/plugins/commands/run.md +841 -13
- package/plugins/commands/status.md +138 -17
- package/plugins/commands/test.md +389 -0
- package/plugins/hooks/constitution-guard.js +1 -1
- package/plugins/hooks/environment-autocommit.js +366 -24
- package/plugins/hooks/environment-manager.js +3 -2
- package/plugins/hooks/execution-tracker.js +109 -4
- package/plugins/hooks/layer1-validator.js +117 -1
- package/plugins/hooks/lib/auto-fix-loop.js +605 -0
- package/plugins/hooks/lib/environment-config-loader.js +11 -7
- package/plugins/hooks/lib/hook-state-manager.js +98 -0
- package/plugins/hooks/lib/memory-extractor.js +27 -5
- package/plugins/hooks/lib/memory-manager.js +1 -1
- package/plugins/hooks/lib/test-auto-fix.test.js +194 -0
- package/plugins/hooks/monitoring-trigger.js +467 -0
- package/plugins/skills/README.en.md +15 -3
- package/plugins/skills/README.md +21 -11
- package/plugins/skills/agile-iteration/SKILL.md +187 -0
- package/plugins/skills/delivery-stage/SKILL.md +133 -12
- package/plugins/skills/design-stage/SKILL.md +103 -12
- package/plugins/skills/experiment-evaluator/SKILL.md +271 -0
- package/plugins/skills/experiment-iteration/SKILL.md +154 -0
- package/plugins/skills/exploration-phase/SKILL.md +93 -10
- package/plugins/skills/field-evolve-analyzer/SKILL.md +65 -0
- package/plugins/skills/field-evolve-distiller/SKILL.md +66 -0
- package/plugins/skills/field-evolve-executor/SKILL.md +94 -0
- package/plugins/skills/field-evolve-executor/executor.js +342 -0
- package/plugins/skills/field-evolve-fixer/SKILL.md +69 -0
- package/plugins/skills/field-evolve-learner/SKILL.md +65 -0
- package/plugins/skills/field-evolve-scanner/SKILL.md +87 -0
- package/plugins/skills/field-evolve-scanner/scripts/fallback-scanner.js +288 -0
- package/plugins/skills/field-evolve-verifier/SKILL.md +64 -0
- package/plugins/skills/hotfix-iteration/SKILL.md +279 -0
- package/plugins/skills/implementation-stage/SKILL.md +156 -15
- package/plugins/skills/layer1-validation/SKILL.md +1 -1
- package/plugins/skills/pending-dashboard/SKILL.md +9 -8
- package/plugins/skills/project-evolve-analyzer/SKILL.md +95 -0
- package/plugins/skills/project-evolve-fixer/SKILL.md +99 -0
- package/plugins/skills/project-evolve-generator/SKILL.md +149 -0
- package/plugins/skills/project-evolve-learner/SKILL.md +103 -0
- package/plugins/skills/project-evolve-reviewer/SKILL.md +104 -0
- package/plugins/skills/project-evolve-scanner/SKILL.md +95 -0
- package/plugins/skills/project-evolve-scanner/scripts/dependency-reuse-checker.js +395 -0
- package/plugins/skills/project-evolve-scanner/scripts/subsystem-coverage.js +315 -0
- package/plugins/skills/project-evolve-verifier/SKILL.md +105 -0
- package/plugins/skills/requirement-stage/SKILL.md +47 -13
- package/plugins/skills/skill-forge/SKILL.md +2 -2
- package/plugins/skills/testing-stage/SKILL.md +583 -8
- package/plugins/skills/waterfall-iteration/SKILL.md +115 -0
- package/scripts/cli/index.js +1 -1
- package/scripts/cli/init.js +30 -4
- package/scripts/cli/list.js +3 -2
- package/scripts/config/commands.config.js +8 -8
- package/scripts/config/hooks.config.js +1 -1
- package/scripts/install/constants.js +204 -165
- package/scripts/state.js +210 -1
- package/knowledge/config/README.en.md +0 -44
- package/knowledge/config/README.md +0 -44
- package/knowledge/config/role-composition.yaml +0 -98
- package/knowledge/config/team-triggers.yaml +0 -198
- package/knowledge/domain/README.md +0 -115
- package/knowledge/domain/flows/README.md +0 -194
- package/knowledge/domain/glossary.md +0 -143
- package/knowledge/domain/rules.md +0 -138
- package/knowledge/environment/component-knowledge.md +0 -316
- package/knowledge/environment/detection-patterns.yaml +0 -502
- package/knowledge/environment/template-registry.md +0 -321
- package/knowledge/guides/requirement-engineering.md +0 -329
- package/knowledge/guides/system-design.md +0 -352
- package/knowledge/principles/constitution.md +0 -134
- package/knowledge/principles/core-principles.md +0 -368
- package/knowledge/principles/design-philosophy.md +0 -877
- package/knowledge/process/README.en.md +0 -38
- package/knowledge/process/README.md +0 -48
- package/knowledge/templates/ai-evaluation.md +0 -150
- package/knowledge/templates/api-design.md +0 -117
- package/knowledge/templates/database-design.md +0 -132
- package/knowledge/templates/domain-driven-design.md +0 -321
- package/knowledge/templates/product-proposal.md +0 -201
- package/knowledge/templates/system-design.md +0 -227
- package/knowledge/templates/task-breakdown.md +0 -107
- package/knowledge/templates/test-case.md +0 -170
- package/plugins/commands/validate.md +0 -108
- package/plugins/skills/benchmark-executor/README.md +0 -93
- package/plugins/skills/evolution-process/SKILL.md +0 -291
- package/plugins/skills/project-evolution/SKILL.md +0 -847
- package/scripts/evolution/evolution-router.js +0 -273
- package/scripts/evolution/evolution-signal-collector.js +0 -307
- package/scripts/evolution/knowledge-loader.js +0 -346
- package/scripts/evolution/marketplace.js +0 -317
- package/scripts/evolution/version-manager.js +0 -371
- /package/knowledge/{process → 02-process}/01-requirement.md +0 -0
- /package/knowledge/{process → 02-process}/02-design.md +0 -0
- /package/knowledge/{process → 02-process}/03-implementation.md +0 -0
- /package/knowledge/{process → 02-process}/04-review.md +0 -0
- /package/knowledge/{process → 02-process}/05-testing.md +0 -0
- /package/knowledge/{process → 02-process}/06-delivery.md +0 -0
- /package/knowledge/{guides/stages/design-planner.md → 03-guides/03-design-solution.md} +0 -0
- /package/knowledge/{guides/stages/code-implementer.md → 03-guides/04-implement-code.md} +0 -0
- /package/knowledge/{guides/stages/test-planner.md → 03-guides/05-plan-testing.md} +0 -0
- /package/knowledge/{guides/stages/test-generator.md → 03-guides/06-generate-tests.md} +0 -0
- /package/knowledge/{guides/stages/release-checker.md → 03-guides/07-check-release.md} +0 -0
- /package/knowledge/{guides/stages/requirement-reviewer.md → 03-guides/09-review-requirement.md} +0 -0
- /package/knowledge/{guides/stages/design-reviewer.md → 03-guides/10-review-design.md} +0 -0
- /package/knowledge/{guides/stages/code-reviewer.md → 03-guides/11-review-code.md} +0 -0
- /package/knowledge/{guides/stages/test-reviewer.md → 03-guides/12-review-testing.md} +0 -0
- /package/knowledge/{guides/stages/security-reviewer.md → 03-guides/13-audit-security.md} +0 -0
- /package/knowledge/{guides/stages/consistency-checker.md → 03-guides/14-check-consistency.md} +0 -0
- /package/knowledge/{guides/stages/unit-test-runner.md → 03-guides/15-run-unit-tests.md} +0 -0
- /package/knowledge/{guides/stages/integration-test-runner.md → 03-guides/16-run-integration-tests.md} +0 -0
- /package/knowledge/{guides/stages/test-context-analyzer.md → 03-guides/17-analyze-test-context.md} +0 -0
- /package/knowledge/{guides/support/practice-logger.md → 03-guides/18-log-practice.md} +0 -0
- /package/knowledge/{guides/support/skill-validator.md → 03-guides/21-validate-skill.md} +0 -0
- /package/knowledge/{guides/support/scope-inference.md → 03-guides/23-infer-scope.md} +0 -0
- /package/knowledge/{guides/support/component-discovery.md → 03-guides/25-discover-component.md} +0 -0
- /package/knowledge/{guides/support/environment-scanner.md → 03-guides/27-scan-environment.md} +0 -0
- /package/knowledge/{guides/support/environment-validator.md → 03-guides/28-validate-environment.md} +0 -0
- /package/knowledge/{guides/support/knowledge-generator.md → 03-guides/29-generate-knowledge.md} +0 -0
- /package/knowledge/{guides/support/ai-capability-analyzer.md → 03-guides/30-analyze-ai-capability.md} +0 -0
- /package/knowledge/{guides/support/ai-component-analyzer.md → 03-guides/31-analyze-ai-component.md} +0 -0
- /package/knowledge/{guides/support/ai-agent-analyzer.md → 03-guides/32-analyze-ai-agent.md} +0 -0
- /package/knowledge/{guides/support/ai-rag-analyzer.md → 03-guides/33-analyze-ai-rag.md} +0 -0
- /package/knowledge/{guides/support/ai-task-assessor.md → 03-guides/34-assess-ai-task.md} +0 -0
- /package/knowledge/{guides/support/ai-pipeline-evaluator.md → 03-guides/35-evaluate-ai-pipeline.md} +0 -0
- /package/knowledge/{guides/support/ai-artifact-evaluator.md → 03-guides/36-evaluate-ai-artifact.md} +0 -0
- /package/knowledge/{guides/support/ai-evaluation-planner.md → 03-guides/37-plan-ai-evaluation.md} +0 -0
- /package/knowledge/{guides/support/ai-path-evaluator.md → 03-guides/38-evaluate-ai-path.md} +0 -0
- /package/knowledge/{guides/support/ai-data-validator.md → 03-guides/39-validate-ai-data.md} +0 -0
- /package/knowledge/{guides/support/ai-anomaly-analyzer.md → 03-guides/40-detect-ai-anomaly.md} +0 -0
- /package/knowledge/{guides/support/ai-test-diagnostics.md → 03-guides/41-diagnose-ai-test.md} +0 -0
- /package/knowledge/{guides/support/test-runner.md → 03-guides/45-test-runner.md} +0 -0
- /package/knowledge/{checklists/test.md → 04-checklists/03-test.md} +0 -0
- /package/knowledge/{config/team-stage.yaml → 05-config/01-team-stage.yaml} +0 -0
- /package/knowledge/{config/role-extensions.yaml → 05-config/04-role-extensions.yaml} +0 -0
|
@@ -7,15 +7,89 @@ description: "When test case generation, QA testing, test plan creation, or test
|
|
|
7
7
|
|
|
8
8
|
你正在执行QA测试阶段。此阶段从用户视角验证产品功能正确性。
|
|
9
9
|
|
|
10
|
+
## ⚠️ 执行约束(强制)
|
|
11
|
+
|
|
12
|
+
**【阻塞检查】** 在开始执行前,必须确认以下条件:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
□ 上游编码实现阶段已完成(检查 state.json)
|
|
16
|
+
□ 代码已通过 Layer1 验证(编译/测试/Lint)
|
|
17
|
+
□ design.md 文件存在且完整
|
|
18
|
+
□ 已读取复杂度评估结果或重新评估
|
|
19
|
+
□ 已确定参与角色列表
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**【跳过检测】** 以下行为将被检测并阻止:
|
|
23
|
+
|
|
24
|
+
| 行为 | 检测方式 | 处理 |
|
|
25
|
+
|------|----------|------|
|
|
26
|
+
| 直接生成测试没有代码 | 检查上游阶段状态 | 阻止,返回执行编码实现 |
|
|
27
|
+
| 跳过测试执行 | 检查测试执行日志 | 阻止,要求执行测试 |
|
|
28
|
+
| 跳过效果评测(AI功能) | 检查评测报告 | 阻止,要求执行效果评测 |
|
|
29
|
+
| 跳过团队对抗审查 | 检查 Agent 调用记录 | 阻止,要求启动多 Agent 审查 |
|
|
30
|
+
|
|
31
|
+
**【强制流程】** 必须按顺序完成以下步骤,不可跳过:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Step 1 → Step 2/3/4 → 阶段完成验证 → Layer1 → 团队对抗 → Layer2 → 阶段门禁
|
|
35
|
+
↓
|
|
36
|
+
【强制】测试必须真实执行
|
|
37
|
+
【强制】AI功能必须有效果评测
|
|
38
|
+
【禁止】跳过测试直接通过
|
|
39
|
+
```
|
|
40
|
+
|
|
10
41
|
## 前置检查
|
|
11
42
|
|
|
12
43
|
1. 确认代码审查阶段已完成(检查 `.autospec/runtime/state.json`)
|
|
13
|
-
2. 读取
|
|
44
|
+
2. 读取 `knowledge/01-principles/09-constitution.md` → 确认红线
|
|
14
45
|
3. 读取需求文档(验收标准是测试用例的基础)
|
|
15
46
|
4. **检查是否为多系统项目**:读取 `.autospec/runtime/config.json` 的 `subsystems` 字段
|
|
16
47
|
5. **检查是否需要效果评测**:检查是否有 ai 类型子系统或 needsEvaluation=true
|
|
17
|
-
6. 如有角色配置,加载
|
|
18
|
-
7. 加载认知增强原则:读取 `${KNOWLEDGE}/principles/
|
|
48
|
+
6. 如有角色配置,加载 `.clause/agents/roles/{角色}.md` 中**QA测试阶段**关注点(如后端关注接口契约测试/数据一致性测试)
|
|
49
|
+
7. 加载认知增强原则:读取 `${KNOWLEDGE}/principles/02-methodology-principles.md` → 本阶段重点应用 CP6(错误即信号)、CP10(自我质检)、CP1(合伙人模式)
|
|
50
|
+
|
|
51
|
+
## 阶段检查点(本阶段必须完成)
|
|
52
|
+
|
|
53
|
+
执行过程中请持续对照以下检查点,确保不遗漏:
|
|
54
|
+
|
|
55
|
+
**说明**:
|
|
56
|
+
- **检查点表**:快速验证产出是否存在/完成
|
|
57
|
+
- **检查清单(checklists/)**:详细验证产出质量是否达标
|
|
58
|
+
- 通过"检查清单核对完成"一项覆盖所有质量检查,避免重复
|
|
59
|
+
|
|
60
|
+
| 类别 | 检查项 | 必须完成 | 验证方式 |
|
|
61
|
+
|-----|-------|---------|---------|
|
|
62
|
+
| 流程 | 模式确定完成 | ✅ | 检查 subsystems 字段确定单/多系统模式 |
|
|
63
|
+
| 做类 | 测试方案规划Agent加载完成 | ✅ | 已加载 plan-testing skill |
|
|
64
|
+
| 做类 | 测试方案规划Agent正确执行 | ✅ | 已产出测试方案(策略/范围/资源) |
|
|
65
|
+
| 做类 | 测试代码生成Agent加载完成 | ✅ | 已加载 generate-tests skill |
|
|
66
|
+
| 做类 | 测试代码生成Agent正确执行 | ✅ | 已产出测试用例代码 |
|
|
67
|
+
| 做类 | 测试代码汇总完成 | ✅ | 各测试文件已合并到正确目录 |
|
|
68
|
+
| 流程 | 团队对抗审查执行(审类) | ✅ | 检查是否已调用 team-orchestrator 并汇总审查报告 |
|
|
69
|
+
| 流程 | independent-reviewer Agent 调用 | ✅ | Layer 2 审查必须调用 |
|
|
70
|
+
| 产出 | 检查清单核对完成 | ✅ | 已按 03-test.md 逐项核对并记录(质量检查) |
|
|
71
|
+
| 流程 | Layer 1 验证通过 | ✅ | 所有测试执行通过 |
|
|
72
|
+
| 流程 | Benchmark 评测通过 | ✅ | TST-001~002 全部通过 |
|
|
73
|
+
|
|
74
|
+
**阶段完成前自检**:
|
|
75
|
+
- [ ] 已确定模式(单系统/多系统)
|
|
76
|
+
- [ ] 已加载测试方案规划Agent(plan-testing skill)
|
|
77
|
+
- [ ] 已执行测试方案规划任务
|
|
78
|
+
- [ ] 已加载测试代码生成Agent(generate-tests skill)
|
|
79
|
+
- [ ] 已执行测试代码生成任务
|
|
80
|
+
- [ ] 测试代码已汇总到正确目录
|
|
81
|
+
- [ ] 已执行团队对抗审查(调用 team-orchestrator)
|
|
82
|
+
- [ ] 已按检查清单(03-test.md)逐项核对(质量检查)
|
|
83
|
+
- [ ] 已调用 independent-reviewer(Layer 2)
|
|
84
|
+
- [ ] Layer 1 验证已通过(测试执行)
|
|
85
|
+
- [ ] Benchmark 评测已通过(Layer 3)
|
|
86
|
+
- [ ] 单元测试已完成
|
|
87
|
+
- [ ] 集成测试已完成
|
|
88
|
+
- [ ] 效果评测已完成(如有AI功能)
|
|
89
|
+
- [ ] 已按检查清单(03-test.md)逐项核对
|
|
90
|
+
- [ ] 已调用 independent-reviewer(Layer 2)
|
|
91
|
+
- [ ] Layer 1 验证已通过(测试执行)
|
|
92
|
+
- [ ] Benchmark 评测已通过(Layer 3)
|
|
19
93
|
|
|
20
94
|
## 执行
|
|
21
95
|
|
|
@@ -30,14 +104,460 @@ description: "When test case generation, QA testing, test plan creation, or test
|
|
|
30
104
|
|
|
31
105
|
### Step 2: 单系统模式(普通功能)
|
|
32
106
|
|
|
33
|
-
1. **【强制】** 加载做类skill:读取 `${KNOWLEDGE}/guides/
|
|
34
|
-
2. **【强制】** 加载做类skill:读取 `${KNOWLEDGE}/guides/
|
|
35
|
-
3. 加载方法论原则:读取 `${KNOWLEDGE}/principles/
|
|
107
|
+
1. **【强制】** 加载做类skill:读取 `${KNOWLEDGE}/03-guides/05-plan-testing.md` → **测试方案规划**
|
|
108
|
+
2. **【强制】** 加载做类skill:读取 `${KNOWLEDGE}/03-guides/06-generate-tests.md` → **测试代码生成**
|
|
109
|
+
3. 加载方法论原则:读取 `${KNOWLEDGE}/principles/02-methodology-principles.md` → 注入 P1(验证为王) 测试原则
|
|
36
110
|
4. 逐条对照需求验收标准,生成测试用例
|
|
37
111
|
5. 生成边界条件和异常路径测试
|
|
38
112
|
6. 针对关键假设设计验证用例
|
|
39
113
|
7. 如有角色特有测试关注点(如后端的"幂等验证"、前端的"跨浏览器兼容"),额外覆盖
|
|
40
114
|
8. 将测试用例转化为可执行的测试代码
|
|
115
|
+
|
|
116
|
+
## Mock配置最佳实践(多语言)
|
|
117
|
+
|
|
118
|
+
**通用Mock原则**(适用于所有语言):
|
|
119
|
+
|
|
120
|
+
1. **Mock外部依赖**:数据库、API、文件系统等
|
|
121
|
+
2. **保持错误类型匹配**:Mock返回的错误类型必须与实际一致
|
|
122
|
+
3. **生命周期管理**:每个测试前清理Mock,测试后重置
|
|
123
|
+
4. **避免过度Mock**:核心业务逻辑不应被Mock
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### JavaScript / TypeScript (Jest / Vitest)
|
|
128
|
+
|
|
129
|
+
```javascript
|
|
130
|
+
// tests/__mocks__/{module}.js
|
|
131
|
+
|
|
132
|
+
// 1. Mock模块加载
|
|
133
|
+
jest.mock('../../src/modules/auth', () => ({
|
|
134
|
+
login: jest.fn().mockResolvedValue({ token: 'mock-token' }),
|
|
135
|
+
logout: jest.fn().mockResolvedValue(true)
|
|
136
|
+
}));
|
|
137
|
+
|
|
138
|
+
// 2. Mock API调用
|
|
139
|
+
jest.mock('../../src/api', () => ({
|
|
140
|
+
fetchUser: jest.fn().mockResolvedValue({ id: 1, name: 'Test User' })
|
|
141
|
+
}));
|
|
142
|
+
|
|
143
|
+
// 3. Mock数据库操作
|
|
144
|
+
jest.mock('../../src/db', () => ({
|
|
145
|
+
query: jest.fn().mockResolvedValue([])
|
|
146
|
+
}));
|
|
147
|
+
|
|
148
|
+
// 4. 错误处理Mock(重要:确保错误类型匹配)
|
|
149
|
+
jest.mock('../../src/services/payment', () => ({
|
|
150
|
+
processPayment: jest.fn().mockRejectedValue(
|
|
151
|
+
new Error('Payment failed')
|
|
152
|
+
)
|
|
153
|
+
}));
|
|
154
|
+
|
|
155
|
+
// 5. 生命周期管理(tests/setupTests.js)
|
|
156
|
+
beforeEach(() => {
|
|
157
|
+
jest.clearAllMocks();
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
afterEach(() => {
|
|
161
|
+
jest.resetAllMocks();
|
|
162
|
+
});
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Vitest变体**:
|
|
166
|
+
```javascript
|
|
167
|
+
import { vi } from 'vitest'
|
|
168
|
+
|
|
169
|
+
vi.mock('../../src/api', () => ({
|
|
170
|
+
fetchUser: vi.fn().mockResolvedValue({ id: 1, name: 'Test User' })
|
|
171
|
+
}))
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### Python (pytest + unittest.mock)
|
|
177
|
+
|
|
178
|
+
```python
|
|
179
|
+
# tests/conftest.py - pytest fixtures
|
|
180
|
+
|
|
181
|
+
import pytest
|
|
182
|
+
from unittest.mock import Mock, patch, MagicMock
|
|
183
|
+
|
|
184
|
+
# 1. Mock模块/类
|
|
185
|
+
@pytest.fixture
|
|
186
|
+
def mock_auth():
|
|
187
|
+
mock = Mock()
|
|
188
|
+
mock.login.return_value = {'token': 'mock-token'}
|
|
189
|
+
mock.logout.return_value = True
|
|
190
|
+
return mock
|
|
191
|
+
|
|
192
|
+
# 2. Mock API调用(使用patch装饰器)
|
|
193
|
+
def test_user_service(mock_auth):
|
|
194
|
+
with patch('src.api.fetchUser') as mock_fetch:
|
|
195
|
+
mock_fetch.return_value = {'id': 1, 'name': 'Test User'}
|
|
196
|
+
# 测试代码
|
|
197
|
+
|
|
198
|
+
# 3. Mock数据库操作
|
|
199
|
+
@pytest.fixture
|
|
200
|
+
def mock_db():
|
|
201
|
+
mock = MagicMock()
|
|
202
|
+
mock.query.return_value = []
|
|
203
|
+
return mock
|
|
204
|
+
|
|
205
|
+
# 4. 错误处理Mock(确保错误类型匹配)
|
|
206
|
+
def test_payment_failure():
|
|
207
|
+
with patch('src.services.payment.processPayment') as mock_pay:
|
|
208
|
+
mock_pay.side_effect = ValueError('Payment failed')
|
|
209
|
+
# 测试代码
|
|
210
|
+
|
|
211
|
+
# 5. 生命周期管理(自动清理)
|
|
212
|
+
@pytest.fixture(autouse=True)
|
|
213
|
+
def reset_mocks():
|
|
214
|
+
yield
|
|
215
|
+
# pytest自动清理
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**unittest.mock常用方法**:
|
|
219
|
+
```python
|
|
220
|
+
from unittest.mock import Mock, patch, call
|
|
221
|
+
|
|
222
|
+
# Mock对象
|
|
223
|
+
mock_obj = Mock()
|
|
224
|
+
mock_obj.method.return_value = result
|
|
225
|
+
mock_obj.method.side_effect = Exception('error')
|
|
226
|
+
|
|
227
|
+
# Patch装饰器
|
|
228
|
+
@patch('module.function')
|
|
229
|
+
def test_something(mock_func):
|
|
230
|
+
mock_func.return_value = 'mocked'
|
|
231
|
+
|
|
232
|
+
# 断言
|
|
233
|
+
mock_obj.method.assert_called_once()
|
|
234
|
+
mock_obj.method.assert_called_with(arg1, arg2)
|
|
235
|
+
mock_obj.method.assert_not_called()
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
### Java (JUnit 5 + Mockito)
|
|
241
|
+
|
|
242
|
+
```java
|
|
243
|
+
// src/test/java/.../MyServiceTest.java
|
|
244
|
+
|
|
245
|
+
import org.junit.jupiter.api.*;
|
|
246
|
+
import static org.mockito.Mockito.*;
|
|
247
|
+
import static org.assertj.core.api.Assertions.*;
|
|
248
|
+
|
|
249
|
+
@ExtendWith(MockitoExtension.class)
|
|
250
|
+
class MyServiceTest {
|
|
251
|
+
|
|
252
|
+
// 1. Mock声明
|
|
253
|
+
@Mock
|
|
254
|
+
private AuthRepository authRepository;
|
|
255
|
+
|
|
256
|
+
@Mock
|
|
257
|
+
private ApiClient apiClient;
|
|
258
|
+
|
|
259
|
+
@InjectMocks
|
|
260
|
+
private MyService myService;
|
|
261
|
+
|
|
262
|
+
// 2. 生命周期管理
|
|
263
|
+
@BeforeEach
|
|
264
|
+
void setUp() {
|
|
265
|
+
Mockito.reset(authRepository, apiClient);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
@AfterEach
|
|
269
|
+
void tearDown() {
|
|
270
|
+
// 清理资源
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// 3. Mock行为定义
|
|
274
|
+
@Test
|
|
275
|
+
void testLogin() {
|
|
276
|
+
// 定义Mock行为
|
|
277
|
+
when(authRepository.findByUsername("test"))
|
|
278
|
+
.thenReturn(Optional.of(new User("test")));
|
|
279
|
+
|
|
280
|
+
// 调用被测试方法
|
|
281
|
+
User result = myService.login("test");
|
|
282
|
+
|
|
283
|
+
// 断言
|
|
284
|
+
assertThat(result).isNotNull();
|
|
285
|
+
verify(authRepository, times(1)).findByUsername("test");
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// 4. 错误处理Mock
|
|
289
|
+
@Test
|
|
290
|
+
void testPaymentFailure() {
|
|
291
|
+
when(paymentService.process(any()))
|
|
292
|
+
.thenThrow(new PaymentException("Payment failed"));
|
|
293
|
+
|
|
294
|
+
assertThatThrownBy(() -> paymentService.process(order))
|
|
295
|
+
.isInstanceOf(PaymentException.class)
|
|
296
|
+
.hasMessage("Payment failed");
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// 5. Mock数据库操作
|
|
300
|
+
@Test
|
|
301
|
+
void testDatabaseOperation() {
|
|
302
|
+
when(repository.findAll()).thenReturn(Collections.emptyList());
|
|
303
|
+
|
|
304
|
+
List<Entity> result = repository.findAll();
|
|
305
|
+
assertThat(result).isEmpty();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**Mockito常用方法**:
|
|
311
|
+
```java
|
|
312
|
+
// 静态导入
|
|
313
|
+
import static org.mockito.Mockito.*;
|
|
314
|
+
|
|
315
|
+
// Mock行为
|
|
316
|
+
when(mock.method()).thenReturn(value);
|
|
317
|
+
when(mock.method(any())).thenThrow(exception);
|
|
318
|
+
doNothing().when(mock).voidMethod();
|
|
319
|
+
|
|
320
|
+
// 验证
|
|
321
|
+
verify(mock).method();
|
|
322
|
+
verify(mock, times(2)).method();
|
|
323
|
+
verify(mock, never()).method();
|
|
324
|
+
verifyNoMoreInteractions(mock);
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
### Go (testing + gomock / testify)
|
|
330
|
+
|
|
331
|
+
```go
|
|
332
|
+
// myservice_test.go
|
|
333
|
+
|
|
334
|
+
package myservice
|
|
335
|
+
|
|
336
|
+
import (
|
|
337
|
+
"testing"
|
|
338
|
+
"github.com/golang/mock/gomock"
|
|
339
|
+
"github.com/stretchr/testify/mock"
|
|
340
|
+
"errors"
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
// 使用gomock
|
|
344
|
+
func TestServiceWithGomock(t *testing.T) {
|
|
345
|
+
ctrl := gomock.NewController(t)
|
|
346
|
+
defer ctrl.Finish()
|
|
347
|
+
|
|
348
|
+
// 1. 创建Mock
|
|
349
|
+
mockRepo := NewMockRepository(ctrl)
|
|
350
|
+
mockAPI := NewMockAPIClient(ctrl)
|
|
351
|
+
|
|
352
|
+
// 2. 定义Mock行为
|
|
353
|
+
mockRepo.EXPECT().
|
|
354
|
+
FindByID(gomock.Eq(1)).
|
|
355
|
+
Return(&User{ID: 1, Name: "Test"}, nil).
|
|
356
|
+
Times(1)
|
|
357
|
+
|
|
358
|
+
mockAPI.EXPECT().
|
|
359
|
+
Fetch(gomock.Any()).
|
|
360
|
+
Return(nil, errors.New("API error"))
|
|
361
|
+
|
|
362
|
+
// 3. 执行测试
|
|
363
|
+
service := NewService(mockRepo, mockAPI)
|
|
364
|
+
result, err := service.GetUser(1)
|
|
365
|
+
|
|
366
|
+
// 4. 断言
|
|
367
|
+
if err != nil {
|
|
368
|
+
t.Errorf("expected no error, got %v", err)
|
|
369
|
+
}
|
|
370
|
+
if result.Name != "Test" {
|
|
371
|
+
t.Errorf("expected Test, got %s", result.Name)
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// 使用testify/mock
|
|
376
|
+
type MockRepository struct {
|
|
377
|
+
mock.Mock
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
func (m *MockRepository) FindByID(id int) (*User, error) {
|
|
381
|
+
args := m.Called(id)
|
|
382
|
+
return args.Get(0).(*User), args.Error(1)
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
func TestWithTestify(t *testing.T) {
|
|
386
|
+
mockRepo := new(MockRepository)
|
|
387
|
+
|
|
388
|
+
// 定义行为
|
|
389
|
+
mockRepo.On("FindByID", 1).Return(&User{ID: 1}, nil)
|
|
390
|
+
|
|
391
|
+
// 执行测试
|
|
392
|
+
result, err := mockRepo.FindByID(1)
|
|
393
|
+
|
|
394
|
+
// 断言
|
|
395
|
+
mockRepo.AssertExpectations(t)
|
|
396
|
+
assert.NoError(t, err)
|
|
397
|
+
assert.Equal(t, 1, result.ID)
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
### C# (xUnit + Moq)
|
|
404
|
+
|
|
405
|
+
```csharp
|
|
406
|
+
// MyServiceTests.cs
|
|
407
|
+
|
|
408
|
+
using Xunit;
|
|
409
|
+
using Moq;
|
|
410
|
+
using System.Threading.Tasks;
|
|
411
|
+
|
|
412
|
+
public class MyServiceTests
|
|
413
|
+
{
|
|
414
|
+
// 1. Mock声明
|
|
415
|
+
private readonly Mock<IAuthRepository> _mockAuth;
|
|
416
|
+
private readonly Mock<IApiClient> _mockApi;
|
|
417
|
+
private readonly MyService _service;
|
|
418
|
+
|
|
419
|
+
public MyServiceTests()
|
|
420
|
+
{
|
|
421
|
+
_mockAuth = new Mock<IAuthRepository>();
|
|
422
|
+
_mockApi = new Mock<IApiClient>();
|
|
423
|
+
_service = new MyService(_mockAuth.Object, _mockApi.Object);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// 2. 生命周期管理
|
|
427
|
+
[Fact]
|
|
428
|
+
public void TestSetup()
|
|
429
|
+
{
|
|
430
|
+
_mockAuth.Reset();
|
|
431
|
+
_mockApi.Reset();
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// 3. Mock行为定义
|
|
435
|
+
[Fact]
|
|
436
|
+
public async Task TestLogin()
|
|
437
|
+
{
|
|
438
|
+
_mockAuth.Setup(x => x.LoginAsync("test", "pass"))
|
|
439
|
+
.ReturnsAsync(new AuthResult { Token = "mock-token" });
|
|
440
|
+
|
|
441
|
+
var result = await _service.Login("test", "pass");
|
|
442
|
+
|
|
443
|
+
Assert.NotNull(result);
|
|
444
|
+
_mockAuth.Verify(x => x.LoginAsync("test", "pass"), Times.Once);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// 4. 错误处理Mock
|
|
448
|
+
[Fact]
|
|
449
|
+
public async Task TestPaymentFailure()
|
|
450
|
+
{
|
|
451
|
+
_mockApi.Setup(x => x.ProcessPaymentAsync(It.IsAny<PaymentRequest>()))
|
|
452
|
+
.ThrowsAsync(new PaymentException("Payment failed"));
|
|
453
|
+
|
|
454
|
+
await Assert.ThrowsAsync<PaymentException>(
|
|
455
|
+
() => _service.ProcessPayment(new PaymentRequest()));
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// 5. Mock数据库操作
|
|
459
|
+
[Fact]
|
|
460
|
+
public void TestDatabaseQuery()
|
|
461
|
+
{
|
|
462
|
+
_mockAuth.Setup(x => x.GetAllUsers())
|
|
463
|
+
.Returns(new List<User>());
|
|
464
|
+
|
|
465
|
+
var result = _mockAuth.Object.GetAllUsers();
|
|
466
|
+
|
|
467
|
+
Assert.Empty(result);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
### Ruby (RSpec)
|
|
475
|
+
|
|
476
|
+
```ruby
|
|
477
|
+
# spec/services/my_service_spec.rb
|
|
478
|
+
|
|
479
|
+
require 'rails_helper'
|
|
480
|
+
|
|
481
|
+
RSpec.describe MyService do
|
|
482
|
+
# 1. Mock声明
|
|
483
|
+
let(:mock_auth) { instance_double('AuthRepository') }
|
|
484
|
+
let(:mock_api) { instance_double('ApiClient') }
|
|
485
|
+
let(:service) { MyService.new(mock_auth, mock_api) }
|
|
486
|
+
|
|
487
|
+
# 2. 生命周期管理(自动清理)
|
|
488
|
+
afterEach do
|
|
489
|
+
# RSpec自动清理
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
# 3. Mock行为定义
|
|
493
|
+
describe '#login' do
|
|
494
|
+
before do
|
|
495
|
+
allow(mock_auth).to receive(:login).with('test', 'pass')
|
|
496
|
+
.return_value(token: 'mock-token')
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
it 'returns auth result' do
|
|
500
|
+
result = service.login('test', 'pass')
|
|
501
|
+
expect(result[:token]).to eq('mock-token')
|
|
502
|
+
end
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
# 4. 错误处理Mock
|
|
506
|
+
describe '#process_payment' do
|
|
507
|
+
before do
|
|
508
|
+
allow(mock_api).to receive(:process_payment)
|
|
509
|
+
.and_raise(PaymentException.new('Payment failed'))
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
it 'raises PaymentException' do
|
|
513
|
+
expect { service.process_payment }
|
|
514
|
+
.to raise_error(PaymentException, 'Payment failed')
|
|
515
|
+
end
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
# 5. Mock数据库操作
|
|
519
|
+
describe '#get_users' do
|
|
520
|
+
before do
|
|
521
|
+
allow(mock_auth).to receive(:get_all_users).and_return([])
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
it 'returns empty array' do
|
|
525
|
+
expect(service.get_users).to be_empty
|
|
526
|
+
end
|
|
527
|
+
end
|
|
528
|
+
end
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
---
|
|
532
|
+
|
|
533
|
+
### 通用Mock原则总结
|
|
534
|
+
|
|
535
|
+
| 原则 | 说明 |
|
|
536
|
+
|------|------|
|
|
537
|
+
| **最小Mock原则** | 只Mock必要的依赖,不要Mock被测试对象本身 |
|
|
538
|
+
| **行为验证** | 验证调用了什么,而不是如何调用 |
|
|
539
|
+
| **错误类型匹配** | Mock错误必须与实际错误类型一致 |
|
|
540
|
+
| **生命周期管理** | 每个测试独立,Mock状态不共享 |
|
|
541
|
+
| **可读性** | Mock配置应该清晰易懂 |
|
|
542
|
+
|
|
543
|
+
**覆盖率门禁执行**:
|
|
544
|
+
```bash
|
|
545
|
+
# 运行测试并生成覆盖率报告
|
|
546
|
+
npm test -- --coverage
|
|
547
|
+
|
|
548
|
+
# 检查覆盖率是否达标
|
|
549
|
+
# - 行覆盖率 >= 70%
|
|
550
|
+
# - 分支覆盖率 >= 60%
|
|
551
|
+
# - 核心功能覆盖率 = 100%
|
|
552
|
+
|
|
553
|
+
# 覆盖率不达标时自动补充测试
|
|
554
|
+
if coverage < 70%:
|
|
555
|
+
1. 分析未覆盖的代码路径
|
|
556
|
+
2. 生成补充测试用例
|
|
557
|
+
3. 重新运行测试
|
|
558
|
+
4. 最多重试3次
|
|
559
|
+
```
|
|
560
|
+
|
|
41
561
|
9. **运行所有测试**,生成测试报告
|
|
42
562
|
|
|
43
563
|
### Step 3: 多系统模式
|
|
@@ -125,19 +645,74 @@ description: "When test case generation, QA testing, test plan creation, or test
|
|
|
125
645
|
|
|
126
646
|
## 验证
|
|
127
647
|
|
|
648
|
+
### 阶段完成验证(阻塞检查)
|
|
649
|
+
|
|
650
|
+
**【强制】【不可跳过】** 在执行 Layer1 验证之前,必须验证以下条件:
|
|
651
|
+
|
|
652
|
+
```
|
|
653
|
+
验证清单:
|
|
654
|
+
□ 上游代码实现已完成
|
|
655
|
+
□ 测试用例已生成
|
|
656
|
+
□ 测试代码已编写
|
|
657
|
+
□ 效果评测脚本已开发(如有AI功能)
|
|
658
|
+
□ 评测数据集已构建(如有AI功能)
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
**验证失败处理**:
|
|
662
|
+
|
|
663
|
+
| 缺失项 | 处理方式 |
|
|
664
|
+
|--------|----------|
|
|
665
|
+
| 代码未完成 | 返回编码实现阶段 |
|
|
666
|
+
| 测试用例未生成 | 执行测试方案规划 |
|
|
667
|
+
| 效果评测未开发 | 执行效果评测开发 |
|
|
668
|
+
|
|
669
|
+
**【禁止】** 验证未通过时,禁止进入 Layer1 验证。
|
|
670
|
+
|
|
128
671
|
### Layer 1: 确定性验证
|
|
129
672
|
- 所有测试用例执行通过
|
|
130
|
-
-
|
|
673
|
+
- **测试覆盖率门禁**:
|
|
674
|
+
- 行覆盖率 >= 70%
|
|
675
|
+
- 分支覆盖率 >= 60%
|
|
676
|
+
- 核心功能覆盖率 = 100%
|
|
677
|
+
- 覆盖率 < 70% 时自动触发测试补充循环(最多3次)
|
|
131
678
|
- 无跳过或被禁用的测试
|
|
132
679
|
- **多系统模式**:所有子系统测试都通过
|
|
133
680
|
- **效果评测模式**:评测脚本可运行,评测报告已产出
|
|
134
681
|
|
|
682
|
+
### 团队审查(按复杂度)
|
|
683
|
+
|
|
684
|
+
**【强制】** 根据复杂度评估结果,启动团队智能体并行审查:
|
|
685
|
+
|
|
686
|
+
#### 简单任务(score <= 5)
|
|
687
|
+
- 质量工程师:测试策略、覆盖度
|
|
688
|
+
|
|
689
|
+
#### 中等任务(score 6-8)
|
|
690
|
+
- 质量工程师 + 技术负责人
|
|
691
|
+
|
|
692
|
+
#### 复杂任务(score >= 9)
|
|
693
|
+
- 质量工程师 + 技术负责人 + 后端工程师 + 前端工程师
|
|
694
|
+
- 如触发强制规则,额外引入安全工程师
|
|
695
|
+
|
|
696
|
+
**执行方式**:
|
|
697
|
+
```
|
|
698
|
+
**【强制】** 读取 `${KNOWLEDGE}/03-guides/01-team-orchestrator.md`
|
|
699
|
+
并行启动团队智能体审查测试:
|
|
700
|
+
- 质量工程师 Agent:测试策略、覆盖率、测试质量
|
|
701
|
+
- 技术负责人 Agent:测试完整性、边界条件覆盖
|
|
702
|
+
- 后端工程师 Agent:接口测试、数据库测试
|
|
703
|
+
- 前端工程师 Agent:UI测试、兼容性测试
|
|
704
|
+
- 数据工程师 Agent:数据质量测试、ETL测试(如涉及数据系统)
|
|
705
|
+
- AI工程师 Agent:效果评测、模型测试(如涉及AI系统)
|
|
706
|
+
- 安全工程师 Agent:安全测试覆盖(如触发)
|
|
707
|
+
汇总审查意见,生成团队审查报告
|
|
708
|
+
```
|
|
709
|
+
|
|
135
710
|
### Layer 2: AI审查(做审分离)
|
|
136
711
|
使用 **test-coverage-reviewer** Agent(专用测试审查Agent)执行独立审查:
|
|
137
712
|
```
|
|
138
713
|
**【强制】** 调用 Agent 工具:
|
|
139
714
|
prompt: 请审查以下测试方案和结果。
|
|
140
|
-
1. 先读取审查标准: ${KNOWLEDGE}/guides/
|
|
715
|
+
1. 先读取审查标准: ${KNOWLEDGE}/03-guides/12-review-testing.md
|
|
141
716
|
2. 测试用例和测试代码
|
|
142
717
|
3. 测试执行报告(或 tests/ 目录)
|
|
143
718
|
4. 上游需求文档: .autospec/specs/{feature}/requirement.md(用于验证覆盖度)
|