Rust 单元测试与集成测试实践
wxk1991 Lv5

Rust 单元测试与集成测试实践

Rust 的测试能力由 Cargo 原生提供,不需要额外搭框架。只要项目结构合理,就可以很自然地写单元测试、集成测试和文档测试。


一、单元测试

单元测试通常写在同一个文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
pub fn add(a: i32, b: i32) -> i32 {
a + b
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn add_two_numbers() {
assert_eq!(add(1, 2), 3);
}
}

运行:

1
cargo test

二、测试私有函数

因为单元测试模块在同一个文件里,所以可以测试私有函数。这对复杂解析器、算法、格式转换函数很有用。


三、集成测试

集成测试放在项目根目录的 tests 文件夹中:

1
2
tests/
api_test.rs

集成测试会像外部用户一样调用你的库,因此更适合验证公开 API。


四、错误测试

不要只测成功路径,也要测试失败输入:

1
2
3
4
5
#[test]
fn parse_invalid_number() {
let result = "abc".parse::<u32>();
assert!(result.is_err());
}

Rust 的 ResultOption 很适合表达这些边界。


五、工程建议

测试可以按风险分层:

  • 纯函数:优先单元测试
  • 模块边界:写集成测试
  • 外部依赖:用测试替身或临时资源

Rust 的编译器已经帮你挡住类型和所有权问题,测试重点应该放在业务规则、边界输入和错误路径上。