集成测试与文档测试
学习目标
- 掌握集成测试组织
- 掌握文档测试
- 理解测试分类
核心概念
集成测试
my_project/
├── src/
│ └── lib.rs
└── tests/ # 集成测试目录
├── api_test.rs
└── common/
└── mod.rs # 共享工具
// tests/api_test.rs
use my_project;
#[test]
fn test_public_api() {
assert_eq!(my_project::add(2, 3), 5);
}
// tests/common/mod.rs
pub fn setup() {
// 测试前置工作
}
文档测试
/// 计算两个数的和。
///
/// # Examples
///
/// ```
/// let result = my_lib::add(2, 3);
/// assert_eq!(result, 5);
/// ```
///
/// # Panics
///
/// ```should_panic
/// my_lib::add(i32::MAX, 1); // 溢出 panic
/// ```
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
测试分类
cargo test # 所有测试
cargo test --lib # 单元测试(src/lib.rs 中的)
cargo test --test api # 集成测试(tests/api.rs)
cargo test --doc # 文档测试
小结
| 类型 | 位置 | 用途 |
|---|---|---|
| 单元测试 | src/*.rs 内的 #[cfg(test)] | 测试内部逻辑 |
| 集成测试 | tests/*.rs | 测试公开 API |
| 文档测试 | /// 文档注释中的代码 | 确保文档示例正确 |