SuperAPI AI 工具集

analyzing-test-failures

测试与质量

查看项目

更新于 10-15 14:56

技能介绍

用途

analyzing-test-failures 是一个纯推理技能,用于解析测试失败或 Code Analyzer 违规的载荷,并输出通俗语言的解释与改进建议。它不进行系统调用,也不编写代码。

主要能力

  • 解析测试失败或 Code Analyzer 违规的 JSON 载荷,生成通俗语言说明。
  • 针对每个失败测试给出具体、按优先级排序的改进建议,并标明修复属于测试还是生产代码。
  • 从不向用户暴露原始 JSON、堆栈跟踪或 API 错误体。

使用方式

前置条件

如果需要自行获取失败载荷而非直接接收,应先加载 checking-devops-prerequisites,再使用 polling-test-results 获取执行结果。如果载荷已在上下文中,则无需前置条件——这是纯推理。

输入

由 polling-test-results 技能提供的 JSON 失败载荷,或直接从测试运行或 Code Analyzer 执行粘贴到上下文中的载荷。每个失败测试具体需要:

  • 测试方法名
  • 失败消息(断言错误或异常文本)
  • 失败类别(断言失败、未处理异常、超时、编译错误)

空组织/无数据情况

如果载荷中没有失败或违规,应清楚报告(例如“No failures found in the provided execution results.”)并停止。当不存在失败、违规或改进建议时,不得编造。

推理步骤

  1. 确定失败类别:
类别 描述
断言失败 测试断言失败(期望值与实际值不匹配)
异常 抛出了未处理的异常
Code Analyzer 违规 违反了静态分析规则(例如 ApexCRUDViolation、ApexSharingViolations)
超时 测试超出执行时间限制
编译错误 类编译失败
  1. 对每个失败,提取并翻译为通俗语言:
  • 涉及的文件和类名
  • 方法名
  • 行号
  • 违反的规则或断言,用通俗语言描述
  • 建议的修复方向(不编写代码)
  1. 如果存在多个失败,按类别分组。

输出格式

测试失败摘要:

<N> failure(s) found:

1. [<Category>] `<ClassName>.cls` — `<methodName>()` at line <N>
   What happened: <plain-language description>
   Rule violated: <ruleName or assertion description>
   Fix direction: <plain-language suggestion>

2. [<Category>] `<ClassName2>.cls` — `<methodName2>()` at line <N>
   ...

Code Analyzer 违规:

对于违规,始终包含:

  • 规则名翻译为通俗英语(例如“ApexCRUDViolation” → “A SOQL query was made without checking object-level permissions first”)
  • 确切的行号
  • 修复方向(例如“Add a Schema.sObjectType.Account.isAccessible() check before the query”)

通俗语言规则:

绝不将原始堆栈跟踪、JSON 载荷或内部 Salesforce 错误代码粘贴到输出中。始终翻译为文件名、方法、行号和通俗描述。

提出改进建议

在测试执行完成且存在失败后调用此部分,而不是针对静态源代码。失败消息是主要信号——它描述测试期望什么与实际发生了什么,直接说明测试需要更好地处理什么。

  1. 阅读每个失败消息

对执行结果中的每个失败测试,提取:

  • 测试方法名
  • 失败消息(断言错误或异常消息)
  • 失败类别(断言失败、未处理异常、超时、编译错误)
  1. 推断测试未处理的内容

根据失败消息推理,识别根本原因模式:

失败模式 改进建议
NullPointerException 测试未处理空输入——添加空检查或确保数据存在的测试设置
Assertion failed: expected X but was Y 断言中的期望值错误,或测试数据设置未产生正确状态
List has no rows for assignment 测试查询的数据不存在——测试设置不完整
System.LimitException: Too many SOQL queries 测试触及调控器限制——被测代码或测试设置进行了过多查询
Insufficient access rights on cross-reference id 测试用户缺少所需权限——测试需要以具有适当配置文件/权限集的用户运行
DML currently not allowed 测试在从不允许的上下文调用的方法中执行 DML
Code Analyzer violation message 生产代码违反了特定规则——测试暴露了它,但修复在生产代码中,而非测试中
  1. 生成可操作的建议

对每个失败,用通俗语言描述:

  • 失败揭示了测试未处理什么
  • 具体应添加或更改什么以使测试健壮
  • 修复是在测试中(断言、设置、权限)还是在生产代码中(测试正确但被测代码有问题)

不要重写测试。只描述需要更改什么以及为什么。

改进建议的输出格式:

Test improvement suggestions based on execution results:

`<testMethodName>()` — [Assertion Failure / Exception / etc.]
Failure: "<failure message>"
What this reveals: <plain-language explanation>
Suggestion: <specific, actionable recommendation>
Fix location: Test | Production code

`<testMethodName2>()` — [NullPointerException]
Failure: "Attempt to de-reference a null object"
What this reveals: The test is calling the method without setting up the required input data
Suggestion: Add test data setup for <object/field> before calling the method
Fix location: Test

Overall: <N> improvement(s) across <M> failed test(s).

测试修复与生产代码修复

标记为 Fix location: Production code 的建议表示测试暴露的代码缺陷——测试逻辑本身是合理的。这些不应以测试质量为由阻止套件推广;应作为生产缺陷单独跟踪。

标记为 Fix location: Test 的建议表示测试需要加固——缺少设置、断言错误、边缘情况覆盖不足(空输入、批量记录量、混合权限上下文、调控器限制边界)。

适用场景

  • 测试执行完成后存在失败,需要通俗语言解释与改进建议。
  • 需要解析 Code Analyzer 违规载荷并给出修复方向。
  • 需要区分修复应落在测试代码还是生产代码。

限制

  • 纯推理,不进行系统调用,不编写代码。
  • 不重写测试,只描述需要更改什么以及为什么。
  • 不暴露原始 JSON、堆栈跟踪或 API 错误体。
  • 无失败或违规时不得编造。

相关技能

  • polling-test-results — 获取输入到此技能的失败载荷。
  • creating-fix-work-item — 用于从分析输出创建跟踪的修复项,或在用户决定采取行动后将批准的改进建议作为工作项跟踪。