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.

4.5k编码与调试未扫描2026年4月6日

安装

claude skill add --url https://github.com/openclaw/skills

文档

Rust Testing Code Review

Review Workflow

  1. Check test organization — Unit tests in #[cfg(test)] modules, integration tests in tests/ directory
  2. Check async test setup#[tokio::test] for async tests, proper runtime configuration
  3. Check assertions — Meaningful messages, correct assertion type
  4. Check test isolation — No shared mutable state between tests, proper setup/teardown
  5. Check coverage patterns — Error paths tested, edge cases covered

Output Format

Report findings as:

text
[FILE:LINE] ISSUE_TITLE
Severity: Critical | Major | Minor | Informational
Description of the issue and why it matters.

Quick Reference

Issue TypeReference
Unit test structure, assertions, test organizationreferences/unit-tests.md
Integration tests, async testing, fixtures, test databasesreferences/integration-tests.md

Review Checklist

Test Structure

  • Unit tests in #[cfg(test)] mod tests within 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_on inside async tests (use .await directly)
  • Test timeouts set for tests that could hang

Assertions

  • assert_eq! / assert_ne! used for value comparisons (better error messages than assert!)
  • 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::Err variants tested, not just happy paths
  • Specific error variants checked (not just "is error")
  • #[should_panic] used sparingly — prefer Result-returning tests

Test Naming

  • Test names read like sentences describing behavior (not test_happy_path)
  • Related tests grouped in nested mod blocks for organization
  • Test names follow pattern: <function>_should_<behavior>_when_<condition>

Snapshot Testing

  • cargo insta used 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 /// # Examples with runnable code
  • Doc tests serve as both documentation and correctness checks
  • Hidden setup lines prefixed with # to keep examples clean
  • cargo test --doc passes (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] without expected message (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 of assert_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 proptest or quickcheck
  • 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 behavior
  • use super::* in test modules — Standard pattern for accessing parent items
  • #[allow(dead_code)] on test helpers — Helper functions may not be used in every test
  • clone() 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() on Result-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

Universal
热门

面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。

想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。

编码与调试
未扫描139.0k

网页应用测试

by anthropics

Universal
热门

用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。

借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。

编码与调试
未扫描139.0k

网页构建器

by anthropics

Universal
热门

面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。

在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。

编码与调试
未扫描139.0k

相关 MCP 服务

GitHub

编辑精选

by GitHub

热门

GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。

这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。

编码与调试
86.1k

by Context7

热门

Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。

它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。

编码与调试
55.8k

by tldraw

热门

tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。

这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。

编码与调试
47.1k

评论