已关闭
test(engine): add unit tests for untested HookEngine trigger methods #1090
luojiyin创建于  7月15日关闭于  7月19日
luojiyin
7月15日 创建

背景

TODO-IMPROVEMENTS.md 中 T008 原文范围是"为 config_loader / script_runner / webhook 补单元测试"。

但经核查,这三个文件已有 50+ 测试覆盖(config 默认值、TOML 解析、按 trigger 注册、parse_output 各类 HookResult、WebhookResponse 序列化等)。真正的缺口在 crates/atomcode-core/src/hook/engine.rs 的 trigger 方法——这些公开方法此前没有单测。

注:issue 范围已重新定位(见下方"范围变更"),避免外部贡献者做重复劳动。

待覆盖的 trigger 方法

方法 对应 trait 是否已被 ShellCommandHook 实现
trigger_post_turn PostTurnHook 否(需 mock)
collect_system_prompt_extensions SystemPromptHook 否(需 mock)
trigger_on_turn_start OnTurnStartHook 否(需 mock)
trigger_on_turn_complete OnTurnCompleteHook 否(需 mock)
trigger_on_model_response OnModelResponseHook 否(需 mock)
trigger_on_error OnErrorHook 否(需 mock)
trigger_on_tool_call_start OnToolCallStartHook 是(可直接用 ShellCommandHook)
stats() — 纯函数,验证计数
空 engine 的 trigger noop — 验证不 panic

参考模式

engine.rs 测试模块已有现成范式可抄:

  • empty_engine_allows — 空 engine 行为
  • shell_command_hook_returning_allow_json — 用 ShellCommandHook::from_hook_config 注册并触发
  • session_start_runs_matching_hooks — 构造 SessionContext 并触发

对 ShellCommandHook 未实现的 trait,在测试模块内定义轻量 mock(参考本 PR 9da5cc19 的 SpyHook / PostTurnSpy / PromptExtender)。

范围变更(重要)

原 T008 列的 3 个文件已充分覆盖,本 issue 的实际范围是:

为 engine.rs 中未覆盖的 trigger 方法补单元测试

请勿为 config_loader / script_runner / webhook 重复写测试。

涉及文件

  • crates/atomcode-core/src/hook/engine.rs(测试模块)

标签

help wanted, testing, good first issue

价值

  • 填补 hook 引擎核心执行路径的测试盲区
  • 纯新增测试,零行为风险,适合外部贡献者
likedislike
TheoCuiTheoCui成员
7月19日 关闭了 issue