关于 rust-testing
这项技能整理了 codex-rs 贡献者采用的 Rust 测试规范,涵盖模块、集成、事件和快照测试,并提供模拟、确定性行为及测试基础设施的实践方法。
主要功能
- 01组织测试文件与断言
- 02模拟 API 和 SSE 交互
- 03构建类型化且可复用的测试数据
- 04通过谓词匹配测试事件
- 05保持测试结果确定
- 06用快照覆盖 TUI 渲染
适用场景
- 01编写 Rust 模块测试
- 02为缺陷修复添加回归测试
- 03用 SSE 模拟测试 Responses API 流程
- 04为 TUI 改动编写快照测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill rust-testing安装后在 Claude Code 中输入/rust-testing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdarch-avoid-env-mutation.mdarch-cargo-bin-resolver.mdarch-regression-per-pr.mdarch-sibling-test-files.mdarch-tempdir-isolation.mdarch-test-module-imports.mdassert-descriptive-names.mdassert-eq-over-bool.mdassert-pretty-assertions.mdassert-snapshot-ui.mdassert-whole-object.mddata-btreemap-tests.mddata-builder-pattern.mddata-minimal-fixtures.mddata-realistic-names.mddata-struct-construction.mddet-deterministic-ids.mddet-fixed-ordering.mddet-no-env-dependency.mddet-no-timing-assertions.mddet-sandbox-env-skip.mdevent-function-call-output.mdevent-request-helpers.mdevent-structured-assertions.mdevent-submit-op.mdevent-wait-for-event.md详细介绍
Codex-RS 贡献者 Rust 测试最佳实践
本指南全面介绍如何按照顶尖 codex-rs 贡献者确立的标准编写高质量 Rust 测试。本技能汇集了测试架构、断言、模拟服务、测试数据、事件驱动测试、确定性、快照测试和集成测试基础设施方面的模式。
适用场景
- 为 codex-rs 中的任何 Rust 模块编写新测试
- 为 Bug 修复添加回归测试(每个 PR 编写 3-6 个测试)
- 创建通过 SSE 模拟与 Responses API 交互的集成测试
- 修改需要快照覆盖的 TUI 渲染代码
- 审查测试代码是否符合代码库约定
按优先级划分的规则类别
| 优先级 | 类别 | 前缀 | 规则 | 重点 |
|---|---|---|---|---|
| 严重 | 测试架构 | arch- | 6 | 文件组织、导入、隔离 |
| 严重 | 断言 | assert- | 5 | pretty_assertions、整体对象比较 |
| 高 | 模拟服务 | mock- | 6 | wiremock、SSE 构建器、ResponseMock |
| 高 | 测试数据 | data- | 5 | 构建器、类型化构造、BTreeMap |
| 中高 | 事件测试 | event- | 5 | 提交/等待周期、谓词匹配 |
| 中 | 确定性 | det- | 5 | 稳定 ID、环境隔离 |
| 中 | 快照测试 | snap- | 4 | Insta 工作流、缓冲区渲染 |
| 中低 | 集成测试 | integ- | 4 | core_test_support、Bazel 兼容性 |
快速参考
- 测试文件位置: 通过
#[path = "feature_tests.rs"]放在同级_tests.rs文件中 - 断言: 始终使用
use pretty_assertions::assert_eq; - 对象比较: 对整个结构体使用
assert_eq!(actual, expected) - SSE 模拟:
responses::mount_sse_once+responses::sse(vec![ev_*(...)]) - 等待事件:
wait_for_event(codex, |ev| predicate) - 快照测试:
insta::assert_snapshot!(terminal.backend()) - 确定性: 使用
BTreeMap而非HashMap,并使用set_deterministic_process_ids - 二进制文件解析:
codex_utils_cargo_bin::cargo_bin("name") - Fixture 路径:
codex_utils_cargo_bin::find_resource!("path") - 沙箱处理:
skip_if_sandbox!()/skip_if_no_network!()
使用方法
- 从严重级别规则(arch、assert)开始——这些规则适用于每个测试
- 编写带 API 模拟的集成测试时,应用高优先级规则(mock、data)
- 测试 Agent 协议时,应用中高优先级规则(event)
- 测试涉及进程 ID 或 UI 渲染时,应用中优先级规则(det、snap)
- 为跨 crate 和构建系统兼容性应用中低优先级规则(integ)
参考文件
| 文件 | 用途 |
|---|---|
references/_sections.md | 章节定义、排序和影响级别 |
references/arch-*.md | 测试架构规则(6 个文件) |
references/assert-*.md | 断言规则(5 个文件) |
references/mock-*.md | 模拟服务规则(6 个文件) |
references/data-*.md | 测试数据规则(5 个文件) |
references/event-*.md | 事件测试规则(5 个文件) |
references/det-*.md | 确定性规则(5 个文件) |
references/snap-*.md | 快照测试规则(4 个文件) |
references/integ-*.md | 集成测试规则(4 个文件) |
assets/templates/_template.md | 规则文件模板 |
metadata.json | 技能元数据和版本 |
评论
支持 Markdown