Rust测试审查
rust-testing-code-review
by anderskev
Reviews Rust test code for unit test patterns, integration test structure, async testing, mocking approaches, and property-based testing. Use when reviewing _test.rs files, #[cfg(test)] modules, or test infrastructure in Rust projects. Covers tokio::test, test fixtures, and assertion patterns.
安装
claude skill add --url https://github.com/openclaw/skills文档
Rust Testing Code Review
Review Workflow
- Check test organization — Unit tests in
#[cfg(test)]modules, integration tests intests/directory - Check async test setup —
#[tokio::test]for async tests, proper runtime configuration - Check assertions — Meaningful messages, correct assertion type
- Check test isolation — No shared mutable state between tests, proper setup/teardown
- Check coverage patterns — Error paths tested, edge cases covered
Output Format
Report findings as:
[FILE:LINE] ISSUE_TITLE
Severity: Critical | Major | Minor | Informational
Description of the issue and why it matters.
Quick Reference
| Issue Type | Reference |
|---|---|
| Unit test structure, assertions, test organization | references/unit-tests.md |
| Integration tests, async testing, fixtures, test databases | references/integration-tests.md |
Review Checklist
Test Structure
- Unit tests in
#[cfg(test)] mod testswithin source files - Integration tests in
tests/directory (one file per module or feature) -
use super::*in test modules to access parent module items - Test function names describe the scenario:
test_<function>_<scenario>_<expected> - Tests are independent — no reliance on execution order
Async Tests
-
#[tokio::test]used for async test functions -
#[tokio::test(flavor = "multi_thread")]when testing multi-threaded behavior - No
block_oninside async tests (use.awaitdirectly) - Test timeouts set for tests that could hang
Assertions
-
assert_eq!/assert_ne!used for value comparisons (better error messages thanassert!) - Custom messages on assertions that aren't self-documenting
-
matches!macro used for enum variant checking - Error types checked with
matches!or pattern matching, not string comparison - One assertion per test where practical (easier to diagnose failures)
Mocking and Test Doubles
- Traits used as seams for dependency injection (not concrete types)
- Mock implementations kept minimal — only what the test needs
- No mocking of types you don't own (wrap external dependencies behind your own trait)
- Test fixtures as helper functions, not global state
Error Path Testing
-
Result::Errvariants tested, not just happy paths - Specific error variants checked (not just "is error")
-
#[should_panic]used sparingly — preferResult-returning tests
Test Naming
- Test names read like sentences describing behavior (not
test_happy_path) - Related tests grouped in nested
modblocks for organization - Test names follow pattern:
<function>_should_<behavior>_when_<condition>
Snapshot Testing
-
cargo instaused for complex structural output (JSON, YAML, HTML, CLI output) - Snapshots are small and focused (not huge objects)
- Redactions used for unstable fields (timestamps, UUIDs)
- Snapshots committed to git in
snapshots/directory - Simple values use
assert_eq!, not snapshots
Doc Tests
- Public API functions have
/// # Exampleswith runnable code - Doc tests serve as both documentation and correctness checks
- Hidden setup lines prefixed with
#to keep examples clean -
cargo test --docpasses (nextest doesn't run doc tests)
Severity Calibration
Critical
- Tests that pass but don't actually verify behavior (assertions on wrong values)
- Shared mutable state between tests causing flaky results
- Missing error path tests for security-critical code
Major
#[should_panic]withoutexpectedmessage (catches any panic, including wrong ones)unwrap()in test setup that hides the real failure location- Tests that depend on execution order
Minor
- Missing assertion messages on complex comparisons
assert!(x == y)instead ofassert_eq!(x, y)(worse error messages)- Test names that don't describe the scenario
- Redundant setup code that could be extracted to a helper
Informational
- Suggestions to add property-based tests via
proptestorquickcheck - Suggestions to add snapshot testing for complex output
- Coverage improvement opportunities
Valid Patterns (Do NOT Flag)
unwrap()/expect()in tests — Panicking on unexpected errors is the correct test behavioruse super::*in test modules — Standard pattern for accessing parent items#[allow(dead_code)]on test helpers — Helper functions may not be used in every testclone()in tests — Clarity over performance- Large test functions — Integration tests can be long; extracting helpers isn't always clearer
assert!for boolean checks — Fine when the expression is clearly boolean (.is_some(),.is_empty())- Multiple assertions testing one logical behavior — Sometimes one behavior needs multiple checks
unwrap()onResult-returning test functions — Propagating with?is also fine but not required
Before Submitting Findings
Load and follow beagle-rust:review-verification-protocol before reporting any issue.
相关 Skills
前端设计
by anthropics
面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。
✎ 想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。
网页应用测试
by anthropics
用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。
✎ 借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。
网页构建器
by anthropics
面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。
✎ 在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。
相关 MCP 服务
GitHub
编辑精选by GitHub
GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。
✎ 这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。
Context7 文档查询
编辑精选by Context7
Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。
✎ 它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。
by tldraw
tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。
✎ 这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。