Skip to content

Rust Testing Skill 是 Everything Claude Code 插件体系下针对 Rust 项目的测试能力扩展,支持单元测试、集成测试、异步测试、属性测试、Mock 与覆盖率分析,全面落地 TDD(测试驱动开发)工作流。它通过标准化测试结构、自动化测试用例生成与覆盖率门控,帮助开发者高效构建可靠、可维护的 Rust 代码,并与其他 Agent/Skill 协同实现端到端质量保障。

Everything Claude Code Rust Testing Skill:集成测试、async 测试、属性测试与覆盖率 TDD 体系

Rust Testing Skill 是 Everything Claude Code 生产级 AI 编程插件体系中,为 Rust 项目量身打造的测试自动化与质量保障能力。它不仅支持传统的单元测试、集成测试,还覆盖了异步(async)测试、属性测试(property-based testing)、Mock 隔离、覆盖率评估等现代测试范式,并内置 TDD(测试驱动开发)完整流程。相比手动维护零散测试脚本和覆盖率统计,Rust Testing Skill 通过标准化流程和自动化工具链,极大提升了测试效率和代码质量,是 AI 编程助手驱动下的 Rust 工程化核心能力之一。

1. Rust Testing Skill 解决了什么问题?

在没有 Rust Testing Skill 的情况下,Rust 测试通常面临以下挑战:

  • 测试结构杂乱,单元测试、集成测试、异步测试、属性测试分散在不同文件或风格不统一,难以维护。
  • Mock、依赖隔离、参数化测试等进阶能力需要手动配置,容易遗漏或实现不规范。
  • 覆盖率统计、CI 阈值门控、TDD 流程缺失,导致测试不全面、回归风险高。
  • 新成员难以快速上手项目测试体系,团队协作效率低。

Rust Testing Skill 针对上述痛点,提供了覆盖全流程的测试标准和自动化能力,包括:

  • 单元测试、集成测试、异步测试、属性测试的标准组织结构与用例模板
  • Mockall、rstest、proptest 等主流测试库的最佳实践集成
  • cargo-llvm-cov 覆盖率自动统计与门控
  • RED-GREEN-REFACTOR TDD 工作流自动化
  • TDD Guide AgentRust Reviewer Agent 等协同,形成测试-审查-修复闭环

2. 触发条件与激活场景

Rust Testing Skill 会在以下典型场景自动激活:

  • 新增/修改 Rust 函数、模块、Trait 时,自动建议并生成对应的测试用例
  • 代码变更后,自动检测测试覆盖率是否达标(默认 80%+,核心逻辑可设为 100%)
  • 需求或 API 变更时,联动 TDD Guide Agent 强制测试先行
  • CI/CD 流水线执行前,自动运行所有测试并校验覆盖率、输出详细报告
  • 需要 Mock 外部依赖、进行属性测试或异步场景验证时,自动推荐/生成合适的测试结构

3. 使用流程 Step by Step

Step 1:确定测试目标

选择需要测试的函数、Trait、模块或 API。例如新增一个加法函数:

rust
pub fn add(a: i32, b: i32) -> i32 { todo!() }

Step 2:编写测试用例(RED)

在同模块 #[cfg(test)] 区域或 tests/ 目录下,先写失败的测试(TDD):

rust
#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn test_add() {
        assert_eq!(add(2, 3), 5);
    }
}

运行:

bash
cargo test
# 预期失败,提示 "not yet implemented"

Step 3:实现最小通过代码(GREEN)

实现刚好让测试通过的代码:

rust
pub fn add(a: i32, b: i32) -> i32 { a + b }

再次运行测试,应全部通过。

Step 4:重构(REFACTOR)

优化实现、重命名变量、抽取逻辑等,确保测试持续通过。

Step 5:组织更多测试类型

单元测试与断言

  • assert_eq!assert!assert_ne! 等宏断言结果
  • 错误/异常场景用 Result 校验或 #[should_panic] 标注

集成测试

tests/ 目录下新建文件,每个文件为独立测试二进制:

rust
// tests/api_test.rs
use my_crate::{App, Config};

#[test]
fn full_request_lifecycle() {
    let config = Config::test_default();
    let app = App::new(config);
    let response = app.handle_request("/health");
    assert_eq!(response.status, 200);
    assert_eq!(response.body, "OK");
}

异步测试

使用 Tokio 等异步运行时:

rust
#[tokio::test]
async fn fetches_data_successfully() {
    let client = TestClient::new().await;
    let result = client.get("/data").await;
    assert!(result.is_ok());
}

参数化测试与属性测试

  • 参数化:用 rstest
  • 属性测试:用 proptest
rust
use rstest::rstest;

#[rstest]
#[case("hello", 5)]
#[case("", 0)]
fn test_string_length(#[case] input: &str, #[case] expected: usize) {
    assert_eq!(input.len(), expected);
}
rust
use proptest::prelude::*;

proptest! {
    #[test]
    fn encode_decode_roundtrip(input in ".*") {
        let encoded = encode(&input);
        let decoded = decode(&encoded).unwrap();
        assert_eq!(input, decoded);
    }
}

Mock 隔离

用 mockall 生成依赖 Mock,便于隔离测试业务逻辑:

rust
use mockall::{automock, predicate::eq};

#[automock]
trait UserRepository {
    fn find_by_id(&self, id: u64) -> Option<User>;
}

#[test]
fn service_returns_user_when_found() {
    let mut mock = MockUserRepository::new();
    mock.expect_find_by_id().with(eq(42)).returning(|_| Some(User { id: 42, name: "Alice".into() }));
    // ...后续业务测试
}

文档测试(doctest)

在文档注释中直接写可执行示例:

rust
/// Adds two numbers.
/// # Examples
/// ```
/// use my_crate::add;
/// assert_eq!(add(2, 3), 5);
/// ```
pub fn add(a: i32, b: i32) -> i32 { a + b }

Step 6:覆盖率统计与门控

用 cargo-llvm-cov 统计并门控覆盖率:

bash
cargo install cargo-llvm-cov
cargo llvm-cov --html
cargo llvm-cov --fail-under-lines 80

CI 配置示例(GitHub Actions):

yaml
- name: Run tests
  run: cargo test
- uses: taiki-e/install-action@cargo-llvm-cov
- name: Coverage
  run: cargo llvm-cov --fail-under-lines 80

Step 7:持续集成与协作

4. 输出示例

  • 生成的测试用例结构标准、命名清晰
  • 属性测试自动生成多组输入,发现边界/异常用例
  • 覆盖率报告(HTML/LCOV),一目了然显示薄弱区域
  • CI 失败时明确提示未达标覆盖率或测试失败原因

5. 常见配套 Agent/Skill 与协作关系

  • TDD Guide Agent:强制测试先行,自动生成/补全测试用例
  • Rust Reviewer Agent:自动审查测试完整性、覆盖率和安全性
  • Verification Loop Skill:集成测试、覆盖率、静态分析等多环节自动验证
  • Agent Harness Construction Skill:为复杂 Agent 任务自动生成测试 Harness

更多协作模式详见 Everything Claude Code 完全指南


FAQ

Q: Rust Testing Skill 支持哪些主流测试库?
A: 默认集成了 mockall(Mock)、rstest(参数化)、proptest(属性测试)、criterion(基准测试)等主流库,并自动推荐最佳实践。

Q: 如何实现 80%+ 的覆盖率门控?
A: 通过 cargo-llvm-cov 工具自动统计覆盖率,并在 CI 配置中设置 --fail-under-lines 80,未达标会直接阻断合并或发布。

Q: 属性测试和传统单元测试如何配合?
A: 属性测试(proptest)用于发现边界和异常输入,单元测试覆盖典型业务场景,两者结合可大幅提升测试深度和健壮性。