用途:为 Rust 项目提供系统化测试模式,遵循 TDD(红-绿-重构)流程,覆盖从单元测试到集成测试、异步测试、属性测试、Mock 与覆盖率统计。
主要能力:单元测试使用 #[cfg(test)] 模块与 #[test];断言宏包括 assert_eq!、assert_ne!、assert!;错误与 panic 测试支持 Result 返回、matches! 匹配错误变体及 #[should_panic(expected = "...")]。集成测试放在 tests/ 目录,每个文件为独立测试二进制。异步测试使用 #[tokio::test],可配合 tokio::time::timeout 验证超时。参数化测试与 fixture 使用 rstest,属性测试使用 proptest,Mock 使用 mockall 的 #[automock]。文档测试写在 /// 代码块中,支持 no_run。基准测试使用 criterion,需在 Cargo.toml 配置 [[bench]] 且 harness = false。覆盖率使用 cargo-llvm-cov。
使用方式:常用命令包括 cargo test、cargo test -- --nocapture、cargo test --lib、cargo test --test api_test、cargo test --doc、cargo test -- --ignored。覆盖率命令:cargo llvm-cov、cargo llvm-cov --html、cargo llvm-cov --lcov > lcov.info、cargo llvm-cov --fail-under-lines 80。安装:cargo install cargo-llvm-cov。CI 中可结合 cargo fmt --check、cargo clippy -- -D warnings 与 taiki-e/install-action@cargo-llvm-cov。
适用场景:编写新函数、方法或 trait;为既有代码补充测试;为性能关键代码创建基准;为输入校验实现属性测试;在 Rust 项目中实践 TDD。
限制与建议:覆盖率目标建议关键业务逻辑 100%、公共 API 90%+、一般代码 80%+,生成代码或 FFI 绑定可排除。避免用 #[should_panic] 替代 Result::is_err() 测试;不要过度 Mock,可行时优先集成测试;不要在测试中使用 sleep(),改用通道、屏障或 tokio::time::pause();保持测试独立,不共享可变状态。具体版本号、平台支持与收费信息暂未提供。