名称: rust-testing 描述: Rust测试模式,用于CLI应用程序、库和框架。该技能适用于编写、评审或重构Rust测试,包括单元测试、集成测试、模拟测试、异步测试和CI集成。在涉及Rust测试、cargo test、mockall、proptest、tokio test或测试组织的任务时触发。
Rust测试最佳实践
Rust应用程序的全面测试指南,涵盖CLI测试、库测试、异步模式和CI集成。包含8个类别中的42条规则,按影响优先级排序,以指导测试设计、模拟策略和CI优化。
何时应用
在以下情况下参考这些指南:
- 为Rust库或模块编写单元测试
- 为CLI应用程序创建集成测试
- 使用mockall或基于特质的设计设置模拟测试
- 使用Tokio测试异步代码
- 为Rust项目配置CI管道
规则类别按优先级
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 测试组织 | 关键 | org- |
| 2 | 模拟和测试替身 | 关键 | mock- |
| 3 | 异步测试 | 高 | async- |
| 4 | 属性测试 | 高 | prop- |
| 5 | 测试夹具和设置 | 中等 | fix- |
| 6 | 断言和错误测试 | 中等 | assert- |
| 7 | CI集成 | 中等 | ci- |
| 8 | 测试性能 | 低-中等 | perf- |
快速参考
1. 测试组织(关键)
org-unit-test-modules- 使用cfg(test)模块进行单元测试org-integration-tests-directory- 将集成测试放在tests目录中org-shared-test-utilities- 使用tests/common/mod.rs作为共享工具org-binary-crate-pattern- 从main.rs中提取逻辑到lib.rsorg-test-naming- 根据行为而非实现命名测试org-test-cli-with-assert-cmd- 使用assert_cmd进行CLI测试
2. 模拟和测试替身(关键)
mock-trait-based-design- 使用基于特质的设计提高可测试性mock-automock-attribute- 使用mockall automock进行复杂模拟mock-avoid-mocking-owned-types- 避免模拟自有类型mock-expect-call-counts- 明确验证模拟调用次数mock-predicate-arguments- 使用谓词验证模拟参数mock-returning-sequences- 使用序列返回多个值mock-static-methods- 使用mock!宏模拟静态方法
3. 异步测试(高)
async-tokio-test-macro- 使用tokio::test作为异步测试函数async-time-control- 使用暂停时间进行超时测试async-mock-io- 使用tokio_test模拟异步IOasync-spawn-blocking- 使用多线程运行时测试spawn_blockingasync-test-channels- 使用通道测试异步通信
4. 属性测试(高)
prop-proptest-basics- 使用proptest进行属性测试prop-custom-strategies- 为领域类型创建自定义策略prop-shrinking- 使用缩小查找最小失败案例prop-invariant-testing- 测试不变量而非特定值
5. 测试夹具和设置(中等)
fix-rstest-fixtures- 使用rstest夹具进行测试设置fix-rstest-parametrized- 使用rstest case进行参数化测试fix-temp-directories- 使用TempDir进行文件系统测试fix-test-context- 使用test-context进行设置和清理fix-once-cell-shared-state- 使用OnceCell进行昂贵的共享设置
6. 断言和错误测试(中等)
assert-specific-errors- 断言特定错误类型而非仅is_errassert-should-panic- 使用should_panic进行panic测试assert-debug-display- 实现Debug以提供清晰的失败消息assert-custom-messages- 使用自定义消息为断言添加上下文assert-floating-point- 对浮点数使用近似比较assert-collection-contents- 断言集合内容而非仅长度
7. CI集成(中等)
ci-cargo-nextest- 使用cargo-nextest加速CIci-caching- 在CI中缓存Cargo依赖ci-test-isolation- 确保并行CI中的测试隔离ci-coverage- 在CI中生成覆盖率报告
8. 测试性能(低-中等)
perf-compile-time- 减少测试编译时间perf-test-filtering- 过滤测试以加速反馈循环perf-avoid-io-in-unit-tests- 在单元测试中避免真实IOperf-parallel-test-execution- 配置并行测试线程perf-benchmark-critical-paths- 使用Criterion对关键路径进行基准测试
如何使用
阅读单独的参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则模板 |
| metadata.json | 版本和参考信息 |