Prhub

#22189 Update test skills and guide

原始 PR 作者 ispobock 合并时间 2026-04-06 20:30 文件变更 2 提交数 3 评论 2 代码增减 +6 / -2

执行摘要

更新测试编写指南,禁止模块级 sys.modules 修改以避免跨测试污染。

根据review评论,现有文档中关于使用setUpModule配合patch.dict的建议存在两个问题:

1) setUpModule在模块导入后执行,如果依赖在顶层导入时触发,补丁会太晚;
2) 需要显式清理以避免污染。本次修改旨在提供更安全、更可靠的测试依赖模拟方法,防止跨测试污染问题。

该PR值得测试开发者和维护者精读,因为它明确了测试依赖模拟的最佳实践。重点关注:

  1. 为什么模块级sys.modules修改会导致跨测试污染。
  2. patch.dict作为类装饰器的正确使用方法。
  3. 现有maybe_stub_sgl_kernel()模式与新指南的关系(这是一个未明确解答的问题)。
讨论亮点

review中只有一个评论者gemini-code-assist[bot]提供了技术反馈:

  1. 指出了原文档建议使用setUpModule配合patch.dict的两个主要缺陷:导入时机问题(setUpModule在模块导入后执行)和清理问题(需要显式start/stop)。
  2. 建议使用patch.dict作为类装饰器是更好的替代方案,因为它能正确处理清理。
  3. 询问了现有maybe_stub_sgl_kernel()模块级调用是否仍是推荐做法,但PR作者没有回复此问题。
    讨论结论:PR作者接受了建议,更新了文档以明确禁止模块级sys.modules修改,推荐更安全的patch.dict使用方式。

实现拆解

修改了两个文档文件:

  1. .claude/skills/write-sglang-test/SKILL.md:在测试编写指南中,将原来的建议从“使用unittest.mock.patch/MagicMock模拟依赖”扩展为明确禁止模块级sys.modules修改,推荐使用patch.dict作为类装饰器或配合start/stop方法。
  2. test/registered/unit/README.md:在单元测试README中,补充说明不要直接在模块级别修改sys.modules,因为pytest会在运行前导入所有测试文件,这种修改会污染整个进程。建议使用patch.dict("sys.modules", ...)并确保正确清理。
文件 模块 状态 重要度
.claude/skills/write-sglang-test/SKILL.md 测试基础设施 modified 7.0
test/registered/unit/README.md 测试基础设施 modified 7.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

测试依赖模拟方法的缺陷与改进 测试

gemini-code-assist[bot] 指出原文档建议的 setUpModule+patch.dict 方法存在导入时机和清理问题,可能导致跨测试污染。

结论:PR 更新了文档,明确禁止模块级 sys.modules 修改,推荐使用 patch.dict 作为类装饰器或配合 start/stop 方法。 · 已解决

maybe_stub_sgl_kernel() 模式是否仍推荐 question

gemini-code-assist[bot] 询问现有 maybe_stub_sgl_kernel() 模块级调用是否仍是推荐做法,但未得到明确回答。

结论:未明确解答,文档更新后与此模式的关系不清晰。 · unresolved

风险与影响

技术风险较低:

  1. 文档变更风险:新指南可能过于严格,影响现有测试编写模式,但这是最佳实践的澄清。
  2. 理解风险:开发者可能误解新指南,错误应用patch.dict导致测试失败。
  3. 兼容性风险:现有测试中可能仍有模块级sys.modules修改,但本次PR只更新文档,不修改代码,因此不会直接影响现有测试运行。

影响范围:

  1. 对用户:无直接影响,这是内部开发文档更新。
  2. 对系统:无代码变更,不影响运行时行为。
  3. 对团队:所有编写SGLang测试的开发者需要遵循新指南,避免使用模块级sys.modules修改,这能提高测试的隔离性和可靠性。
    影响程度:中等,涉及测试编写规范的变更,但只影响开发流程,不影响产品功能。
文档变更影响开发实践 未解答现有模式兼容性

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论