rust-testing について
codex-rsのコントリビューターが用いるRustテスト規約をまとめたスキルです。モジュール、統合、イベント、スナップショットの各テストを、モック、決定性、テスト基盤の実践例とともに案内します。
主な機能
- 01テストファイルとアサーションの整理
- 02APIおよびSSEのやり取りのモック
- 03型付きで再利用可能なテストデータの構築
- 04述語マッチングによるイベントテスト
- 05テスト結果の決定性の維持
- 06スナップショットによるTUI描画の検証
活用シーン
- 01Rustモジュールテストの作成
- 02バグ修正の回帰テスト追加
- 03SSEモックを使ったResponses APIフローのテスト
- 04TUI変更のスナップショットテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
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 モジュールに新しいテストを書くとき
- バグ修正の回帰テストを追加するとき(PR ごとに 3~6 件)
- SSE モックを使って Responses API とやり取りする統合テストを作成するとき
- スナップショットによるカバレッジが必要な TUI のレンダリングコードを変更するとき
- コードベースの規約に準拠しているか、テストコードをレビューするとき
優先度別ルールカテゴリ
| 優先度 | カテゴリ | プレフィックス | ルール数 | 主な内容 |
|---|---|---|---|---|
| CRITICAL | テストアーキテクチャ | arch- | 6 | ファイル構成、インポート、分離 |
| CRITICAL | アサーション | assert- | 5 | pretty_assertions、オブジェクト全体の比較 |
| HIGH | モックサーバー | mock- | 6 | wiremock、SSE ビルダー、ResponseMock |
| HIGH | テストデータ | data- | 5 | ビルダー、型付き構築、BTreeMap |
| MEDIUM-HIGH | イベントテスト | event- | 5 | submit/wait サイクル、述語による照合 |
| MEDIUM | 決定性 | det- | 5 | 安定した ID、環境の分離 |
| MEDIUM | スナップショットテスト | snap- | 4 | Insta のワークフロー、バッファーのレンダリング |
| LOW-MEDIUM | 統合テスト | 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())を使います - 決定性:
HashMapよりBTreeMapを使い、set_deterministic_process_idsを設定します - バイナリの解決:
codex_utils_cargo_bin::cargo_bin("name")を使います - フィクスチャのパス:
codex_utils_cargo_bin::find_resource!("path")を使います - サンドボックスの処理:
skip_if_sandbox!()/skip_if_no_network!()を使います
使用方法
- CRITICAL ルール(arch、assert)から始めます。これらはすべてのテストに適用されます
- API モックを使った統合テストを書く場合は、HIGH ルール(mock、data)を適用します
- エージェントプロトコルをテストする場合は、MEDIUM-HIGH ルール(event)を適用します
- プロセス ID や UI のレンダリングを扱うテストでは、MEDIUM ルール(det、snap)を適用します
- クレート間およびビルドシステムとの互換性には、LOW-MEDIUM ルール(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 対応