关于 platform-apex-test-run
用于运行 Apex 测试、分析失败并检查代码覆盖率的 Salesforce 技能。它指导开发者从小范围测试开始,逐步诊断问题并进行针对性修复。
主要功能
- 01运行指定范围的 Apex 测试
- 02分析失败与堆栈跟踪
- 03检查覆盖率缺口
- 04指导测试修复迭代
- 05建议测试场景覆盖
适用场景
- 01运行单个类或方法的测试
- 02调查失败的测试
- 03查找未覆盖的代码路径
- 04回归测试前提升覆盖率
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill platform-apex-test-run安装后在 Claude Code 中输入/platform-apex-test-run确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdassets/basic-test.clsbulk-test.clsdml-mock.clsmock-callout-test.clsstub-provider-example.clstest-data-factory.clsreferences/cli-commands.mdmocking-patterns.mdperformance-optimization.mdtest-fix-loop.mdtest-patterns.mdtesting-best-practices.mdscripts/parse-test-results.py详细介绍
platform-apex-test-run:Salesforce 测试执行与覆盖率分析
当用户需要执行 Apex 测试并分析失败原因时使用此技能:运行测试、检查覆盖率、解读失败、提升覆盖率,以及为 Salesforce 代码管理规范的测试修复循环。
此技能适用的任务
当工作涉及以下内容时,使用 platform-apex-test-run:
sf apex run test工作流- Apex 单元测试失败
- 代码覆盖率分析
- 找出未覆盖的代码行和缺失的测试场景
- 为 Apex 代码执行结构化的测试修复循环
以下情况应委派给其他技能:
- 编写或重构生产环境 Apex →
platform-apex-generate技能 - 测试 Agentforce Agent →
agentforce-test技能 - 使用 Jest 测试 LWC → experience-lwc-generate
首先收集必要的上下文
询问或推断:
- 目标 org 别名
- 预期测试范围:单个类、指定方法、测试套件或本地测试
- 覆盖率阈值要求
- 用户只需要诊断,还是需要执行测试修复循环
- 是否已有相关的测试数据工厂
推荐工作流
1. 确定测试范围
找出:
- 现有的测试类
- 目标生产类
- 测试数据工厂/设置辅助工具
2. 先运行最小的有效测试集
调试失败时从小范围开始;只有在修复稳定后才扩大范围。
3. 分析结果
重点关注:
- 失败的方法
- 异常类型和堆栈跟踪
- 未覆盖的代码行/覆盖不足的区域
- 失败是否源于测试数据错误、断言脆弱或生产逻辑故障
4. 执行规范的修复循环
当问题与代码或测试质量有关时:
- 必要时将代码修复委派给
platform-apex-generate技能 - 添加或改进测试
- 在更广泛的回归测试之前,重新运行针对性测试
5. 有针对性地提升覆盖率
覆盖:
- 正向路径
- 负向/异常路径
- 批量处理路径(适用时,使用 251 条以上记录)
- 相关时的 callout 或异步路径
重要规则
| 规则 | 原因 |
|---|---|
默认使用 SeeAllData=false | 确保测试隔离;避免依赖 org 特有数据 |
| 每项测试都必须断言有意义的结果 | 没有断言的测试无法证明任何内容,只会带来虚假的信心 |
| 使用 251 条以上记录测试批量行为 | 触发每批 200 条记录的处理;251 条记录会跨越此边界 |
使用工厂/@TestSetup 来提升清晰度 | 在同一处一致地创建数据;每个测试方法之间会回滚数据 |
异步操作使用 Test.startTest() 和 Test.stopTest() | 确保异步操作(queueable、future)在断言前完成 |
| 不要在测试中隐藏不稳定的 org 依赖 | 避免因 org 状态导致间歇性失败 |
常见问题
| 问题 | 解决方法 |
|---|---|
| 测试在本地通过,但在 CI org 中失败 | 检查是否使用了 SeeAllData=true,或是否隐式依赖 org 特有记录 |
| 重构后覆盖率意外下降 | 先运行针对类的测试,再扩大到 RunLocalTests 进行确认 |
| callout 测试中出现 "Uncommitted work pending" 错误 | 在同一个测试上下文中,DML 和 HTTP callout 不能混用,除非用 Test.startTest() 包裹 |
| Mock 在测试中未生效 | 确保在发出 callout 的代码运行前调用 Test.setMock() |
测试方法中缺少 @TestSetup 数据 | @TestSetup 数据会按测试方法提交;请重新查询,不要存储在静态变量中 |
| API 版本 67.0 及更高版本未执行必要的访问级别检查 | 检查失败的 SOQL/DML 堆栈跟踪,确认是否存在 CRUD/FLS 访问错误;若预期采用用户模式行为,使用分配了权限集的 System.runAs;若需要系统访问,则记录合理的 SYSTEM_MODE 路径 |
输出格式
完成后,按以下顺序报告:
- 运行了哪些测试
- 通过/失败摘要
- 覆盖率结果
- 根本原因调查结果
- 修复或下一轮运行建议
建议格式:
Test run: <scope>
Org: <alias>
Result: <passed / partial / failed>
Coverage: <percent / key classes>
Issues: <highest-signal failures>
Next step: <fix class, add test, rerun scope, or widen regression>
跨技能集成
| 需求 | 委派给 | 原因 |
|---|---|---|
| 修复生产代码或编写测试类 | platform-apex-generate skill | 代码生成与修复 |
| 创建批量/边缘情况测试数据 | platform-data-manage | 逼真的测试数据集 |
| 将更新后的测试部署到 org | platform-metadata-deploy | 部署工作流 |
| 检查详细运行时日志 | platform-apex-logs-debug | 深入分析故障 |
参考文件索引
| 文件 | 阅读时机 |
|---|---|
references/cli-commands.md | 所有 sf apex run test 命令标志、输出格式、异步执行和覆盖率命令 |
references/test-patterns.md | 测试类模板——基础、批量(251+)、模拟调用和数据工厂模式 |
references/testing-best-practices.md | 核心测试原则——AAA 模式、命名约定、批量、负向和模拟策略 |
references/test-fix-loop.md | Agent 式测试修复循环实现和故障分析决策树 |
references/mocking-patterns.md | HttpCalloutMock、DML 模拟、StubProvider 和选择器模拟模式 |
references/performance-optimization.md | 缩短测试执行时间的技术——DML 模拟、SOQL 模拟、循环优化 |
assets/basic-test.cls | 模板:标准测试类,包含 @TestSetup、正向/负向/批量/边缘情况方法 |
assets/bulk-test.cls | 模板:包含 251+ 条记录的批量测试,跨越 200 条记录的触发器批次边界 |
assets/mock-callout-test.cls | 模板:使用 HttpCalloutMock 的 HTTP 调用模拟 |
assets/test-data-factory.cls | 模板:可复用的 TestDataFactory,包含创建和插入辅助方法 |
assets/dml-mock.cls | 模板:用于免数据库单元测试的 IDML 接口 + DMLMock 实现 |
assets/stub-provider-example.cls | 模板:基于 StubProvider 的依赖注入桩 |
scripts/parse-test-results.py | 工具后置钩子——解析 sf apex run test JSON 输出,并为自动修复循环整理失败信息 |
评分指南
| 分数 | 含义 |
|---|---|
| 108+ | 生产级测试可信度强 |
| 96–107 | 测试套件良好,仅有少量缺口 |
| 84–95 | 尚可,但应加强覆盖率/断言 |
| < 84 | 低于标准;依赖前应进行修订 |
评论
支持 Markdown