Ohhnews

分类导航

$ cd ..
Jetbrains Blog原文

Rider 2026.2 EAP新技能finding-tests:让AI代理精准定位测试文件,节省50% Token

#rider#ai代理#代码覆盖#测试定位#token成本

当您让一个 AI agent 编写一项新功能时,一个好 agent 最终会说:“我需要为此写一个测试。”

但接下来发生的事情通常很混乱。

为了确定新测试该放在哪里,agent 不得不开始在您的项目中搜索。它可能会扫描文件名、检查文件夹、用 grep 查找方法名,并逐个文件读取,只是为了理解您的测试是如何组织的。这会迅速消耗掉您的 token 限额。

更糟的是,在复杂的 .NET 解决方案中,一个生产文件可能被多个项目或测试套件测试,agent 仍然可能猜错。它可能把测试放错地方、错过相关的测试夹具,或者采用与团队已有风格完全不同的测试方式。

在 Rider 2026.2 EAP 中,我们通过教会 AI agent 一项新技能来改进这一工作流程——这项技能利用 JetBrains 的 .NET 覆盖率数据工具,将您的 AI 开销减半。

为什么 AI agent 需要的不仅仅是代码上下文

AI agent 之所以有用,是因为它们能够处理多步开发任务。它们可以检查代码、做出更改、运行测试、对失败做出反应并进行迭代。

但即使是最强大的 agent,其能力也受限于它所接收的上下文。

当 agent 需要添加一个测试时,问题不仅仅是:“这个测试应该断言什么?”它还需要知道:

  • 这段代码的测试通常放在哪里?
  • 哪些现有测试已经覆盖了附近的代码?
  • 该项目使用什么测试框架、夹具结构、命名规范和断言风格?
  • 是否已经有了一个应该扩展的测试文件,而不是创建一个新的?

人类开发者通常凭借经验知道这些。而 AI agent 通常不得不通过昂贵的途径来发现:读取整个项目。

这就是 AI agent 技能发挥作用的地方。

什么是 agent 技能?

如果您一直关注 AI 辅助开发的最新动态,您可能已经听说过 Agent Skills —— 这是由 Anthropic 引入的一项开放标准,用于通过专业知识和工作流程扩展 AI agent 的能力。您可以在此博文中了解更多关于 JetBrains IDE 中 agent 技能的信息。

在 Rider 中,技能为 AI agent 提供了对 IDE 原生上下文和工作流程的访问。技能可以帮助 agent 利用 Rider 已经掌握的信息来执行特定任务,而不是仅仅依赖通用文档或要求模型手动探索您的项目。

您可以通过 设置 / 首选项 | 工具 | AI Assistant | 技能 在 Rider 中管理技能。可以根据使用方式和位置,在不同范围内启用技能:

  • IDE 范围: 可用于 Rider UI 内的所有项目和所有 agent。
  • 全局每 agent 范围: 可用于特定 agent 在跨所有项目(包括 IDE 外部)时使用。例如,可以在 agent 特定的目录(如 ~/.codex)中进行配置。
  • 每项目范围: 可用于特定项目中的所有 agent(包括 IDE 外部)。例如,可以在项目级别的 .agents 目录中进行配置。
  • 每项目每 agent 范围: 仅适用于特定项目中的特定 agent,例如项目级别的 .codex 目录。

安装后,当任务相关时,受支持的 agent 可以自动使用这些技能。您也可以在 AI 聊天中通过输入 / 后跟技能名称来手动调用技能。

引入 finding-tests 技能

虽然像 Microsoft 的 dotnet/skills 这样的生态系统为 AI agent 提供了关于如何编写 .NET 测试的通用文档,但它们仍然让 AI 猜测在哪里放置测试。

我们引入了一项名为 finding-tests 的新 agent 技能,而不是让 agent 在需要编写测试时漫无目的地搜索您的代码库。它分两部分提供:作为 Rider AI Assistant 的内置技能,以及作为独立的 MCP 工具(findTests),供 Claude Code 或 Codex 等外部 agent 使用。

[LOADING...] [LOADING...]

内置技能在 Rider 2026.2 EAP 中默认启用。要与外部 agent 一起使用,请在相关 agent 或项目范围内安装该技能,然后确保外部客户端可以通过 MCP 访问 Rider。您可以通过 设置 / 首选项 | 工具 | MCP 服务器 进行此操作:启用 MCP 服务器,然后使用 自动配置 为外部客户端设置访问。

其思路很简单:Rider 已经通过内置的 dotCover 工具 拥有强大的 .NET 覆盖率分析能力,因此当 AI agent 需要理解某段代码的测试位置时,它不必仅凭文件夹名称和搜索结果来推断这种关系。

它可以直接询问 Rider。

然后 Rider 将使用 dotCover 的覆盖率数据来识别哪些测试与 agent 正在处理的代码相关联。这会将覆盖率数据转化为 AI 生成测试时可操作的有用上下文。

这是底层工作流程的示意:

  1. agent 决定需要测试。 当 AI 编写新代码、修改现有行为或您明确要求它添加测试覆盖时,它可以触发 finding-tests 技能。
  2. Rider 向 dotCover 请求覆盖率上下文。 dotCover 运行解决方案中包含的测试,并绘制出 agent 正在处理的代码周围的覆盖率数据。
  3. 找到正确的测试位置。 因为 Rider 可以理解哪些测试已经覆盖了附近的代码,所以它可以将相关的测试文件路径提供给 agent,而不是让 agent 手动发现。
  4. agent 遵循您现有的测试风格。 agent 直接进入正确的文件,阅读周围的测试,遵循您项目的约定,并生成一个适合现有代码库的测试。

以下是完整的 IDE 内部工作流程:

结果:token 成本减半

这不仅仅是生活质量的改善。它对您的工作流程——以及您的预算——都有重大影响。

✂️ Token 成本削减 50%

通过阻止 AI 在项目中不必要的徘徊,您可以节省大量资金。

在我们的内部基准测试(主要使用 Claude agent 测试)中,将 agent 直接路由到正确的文件可以将 token 消耗降低多达 50%。 [LOADING...] 在真实开源解决方案的一系列 C# 测试生成案例中的成本对比显示,使用 finding-tests agent 技能与 Claude 配合使用可以显著降低 AI agent 任务的平均成本。

好处不仅仅是降低 AI 支出。对于使用基于配额访问或共享 AI 信用池的团队来说,这也意味着更少的信用浪费在搜索和探索上。相反,更多的 AI 额度可以用于更高价值的开发任务。

🎯 每次都是正确的文件

没有覆盖率数据,agent 只能猜测。在一个大型代码库中,一个类可能会从多个位置进行测试,这些猜测常常是错误的,导致测试被放到错误的文件中、风格不匹配或针对错误的测试套件。

有了 finding-tests,agent 就有了精确的地图。没有猜测。没有错误的文件。没有风格不匹配。

时间 vs. token

我们希望完全透明地说明这是如何工作的:这种设置是用 token 支出来换取时间。

为了给 AI 提供精确的文件路径,dotCover 必须对您的解决方案运行覆盖率分析。对于中小型项目,这可能需要 30 秒。但如果您在大型代码库中工作,运行完整的覆盖率扫描可能需要几分钟甚至几小时。

如果您明天有发布截止日期,您最不希望看到的就是您的 IDE 突然开始进行长达数小时的测试运行。幸运的是,解决方案相当简单。

如何关闭它

由于这种时间上的权衡,将控制权交给您是我们的首要任务。finding-tests 技能在此 EAP 中是内置并默认启用的,但您可以禁用它或将其限制在特定项目中。

要管理它,请前往 设置 / 首选项 | 工具 | AI Assistant | 技能。在面板上找到 finding-tests,您可以检查技能、禁用它或使用下拉菜单为特定项目进行配置。 [LOADING...]

您可以稍后轻松重新启用该技能。

已知问题

由于这是早期访问计划 (EAP),我们仍在解决一些小问题。以下是您需要注意的:

  • 首次运行卡顿: finding-tests 工具偶尔会在首次启动时遇到问题或失败。通常第二次尝试就能正常运行。

  • IDE 内对 Codex 的支持目前有限: 目前,由于技能捆绑机制的已知问题,内置技能在 AI Assistant 内不可用于 Codex。AI Assistant 团队正在努力修复。

    可能的解决方法: 如果您想将 finding-tests 与 Codex 一起使用,请显式地在全局或项目范围内安装该技能。这会使该技能对外部 agent 和 IDE 内部 agent 都可用。

  • 大型解决方案超时: 如果完整测试运行耗时超过 120 秒,Codex 和 Copilot agent 当前会超时。我们知道现实世界的解决方案可能需要更长的测试时间,我们正在优化此管道。

    Codex 的解决方法: 外部 Codex 可以通过增加 MCP 配置中的工具超时时间来缓解此问题。根据 Codex 文档,在全局或项目 MCP 配置中为 tool_timeout_sec 参数设置更大的值。

  • 外部 agent 需要 MCP 设置: 要将 finding-tests 与外部 agent(如 Claude Code 或 Codex)一起使用,您需要启用 Rider 的 MCP 服务器并为 agent 配置 MCP 访问权限。
    前往 设置 / 首选项 | 工具 | MCP 服务器,启用 MCP 服务器,然后自动配置或手动为您的 agent 配置 Rider 的 MCP 服务器。之后,在 agent 的全局或项目范围内安装该技能。

下一步路线图

以下是对未来方向的预告:如果 finding-tests 技能被证明有价值,我们的下一步将是引入目标覆盖率——一项功能,AI agent 将自动生成足够的单元测试以达到预先选择的特定代码覆盖率百分比。

这将使您能够轻松满足强制性的覆盖率要求,而无需额外花时间手动编写测试。您对此 EAP 的反馈直接影响此功能是否会被构建。

告诉我们您的想法

此功能对所有 Rider 2026.2 EAP 用户可用,这为您提供了一个绝佳的机会,可以免费探索 dotCover——我们通常需要 dotUltimate 许可证 的旗舰代码覆盖率工具。

[下载 Rider 2026.2 EAP]

现在,我们需要了解此技能是否有效、是否能为您带来足够的好处,以及是否有我们需要考虑的边缘情况。尝试新的测试生成,看看它如何影响您的工作流程,并请告诉我们此技能是否应默认保留为内置,还是应移至可选注册表!