dsh-testgen:为 DeepSeek Harness 提供生成、运行并修复单元测试的插件

前言

DeepSeek Harness(DSH)的插件生态以「一切皆插件」为思路。社区目录是独立站点,不代表 DeepSeek 或幻方的官方从属关系,也不等同于官方应用商店。

在 DSH 中写代码时,一个常见问题是:代码已经生成,但测试没有被生成、运行和修复。bujue600-arch/dsh-testgen 面向这个问题,提供一个 /testgen 命令和一个 generate_tests 工具,用来脚手架生成单元测试、调用项目测试运行器,并在有界迭代中修复测试,直到测试通过。

这是什么

dsh-testgen 是一个 DeepSeek Harness 插件,由 bujue600-arch 维护,许可证为 MIT。

它的一句话定位是:为 DeepSeek Harness 提供自动化单元测试生成,包括 /testgen 命令和 generate_tests 工具,用于脚手架、运行并修复测试,直到测试通过。

核心功能

/testgen 命令

/testgen 是面向人的斜杠命令。

已核实能力包括:

  • 支持 [options] <file-or-glob>
  • 支持 --json
  • 支持 --help
  • 结果直接渲染在 Web UI 中。

generate_tests 工具

generate_tests 是面向模型的工具,供 DSH 中的智能体调用。

已核实能力包括:

  • 使用结构化 JSON 输入和输出。
  • 支持协作式取消。
  • 不会并行运行。

两类生成器

dsh-testgen 提供两类生成路径:

1、LLM generator:通过 ctx.llm 流式生成,遵循当前 provider/model,并对源码输入做有界截断。

2、Template generator:从导出符号脚手架生成零依赖冒烟测试,不需要 API key。

生成、运行与修复

dsh-testgen 的核心流程是:生成测试 → 运行测试 → 解析失败 → 修复测试。

已核实能力包括:

  • 生成 → 运行 → 修复循环。
  • 针对不同测试框架做失败解析。
  • 修复轮次由 maxIterations 限制。
  • 测试运行器自动检测 vitestjestmocha
  • 无法识别框架时,使用 node --test 作为通用回退。

配置与生命周期

已核实能力包括:

  • settings.yaml 中存在 testgen 配置段。
  • 配置编辑后在下次调用时生效,不需要重启。
  • 注册和进行中的运行会随插件 fiber 一起清理。
  • 拒绝覆盖用户已有测试。

实现质量

已核实事实中还提到:

  • TypeScript 端到端实现。
  • 使用 schemastery 配置。
  • 提供稳定错误码。
  • 包含 78 个单元测试,其中包含一次真实端到端运行。

安装与启用

使用 dsh-testgen 需要满足以下要求:

  • Node ≥ 22。
  • dsh,即 DeepSeek Harness CLI。

安装命令如下:

dsh plugin --profile web add github:bujue600-arch/dsh-testgen

这条命令将插件安装到 web profile。

已核实事实中还提到:

  • npm 包会随其面向的首个稳定 dsh release 发布;届时建议固定到 release tag。
  • 通过 git 或文件方式安装时,pnpm 可能因为 linked dependencies 缺少 peers 而返回非零退出码;这是已记录的预期情况,harness 会在启动时从 profile 自身的 module fallback 解析 peer packages,插件仍可加载。

典型用法

斜杠命令

下面这些命令来自已核实用法示例:

/testgen src/utils/math.ts
/testgen --runner vitest "src/**/*.ts"
/testgen --generator template --no-run src/app.ts
/testgen --model deepseek-official/deepseek-chat src/parser.ts

模型工具

智能体也可以直接调用 generate_tests 工具。示例如下:

generate_tests({ target: "src/utils/math.ts", runner: "vitest", maxIterations: 3 })

生成位置与覆盖策略

已核实事实说明:

  • src/utils/math.ts,测试文件会落到 src/utils/__tests__/math.test.ts
  • 使用 node:test 时,文件扩展名为 .test.mts
  • 已有测试文件不会被覆盖。
  • 如果目标已经存在测试文件,该目标会被跳过,并给出警告。

适用场景与注意

适合这些场景:

1、你在使用 DSH,并且希望智能体写代码后继续完成单元测试闭环。

2、你的项目使用 vitestjestmochanode --test

3、你希望测试生成、测试运行和失败修复都发生在 DSH 会话内。

4、你希望已有测试文件不被覆盖。

需要注意:

  • dsh-testgen 以当前 dsh 进程权限运行,安装前应检查源码与许可证。
  • 它不会覆盖已有测试文件,而是跳过目标并给出警告。
  • 修复循环受 maxIterations 限制,不是无限重试。
  • 运行环境需要 Node ≥ 22 和 dsh
  • 当前资料中已声明 @deepseek-ai/cordis ^4.0.1 为 peer dependency;package.jsonpeerDependencies 段落在已核实事实中被标注为截断,完整列表不应据此推断。

结尾

dsh-testgen 的价值在于把单元测试放进 DSH 的智能体工作流中:先有 /testgen 命令供人使用,再有 generate_tests 工具供模型调用,并在有界迭代内完成生成、运行和修复。

相关链接:

  • GitHub:https://github.com/bujue600-arch/dsh-testgen
  • 目录页线索(该 URL 在已核实事实中标注为仅来自插件线索,未在所给来源中核实):https://www.skillhub.cn/plugins/bujue600-arch/dsh-testgen
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜