完整教程:十四、测试 (Testing)

Rust内置了强大的测试框架,使得编写和运行测试变得非常简单。Rust的测试系统主要包括单元测试、集成测试和文档测试。

1. 单元测试

单元测试通常放在与被测试代码相同的文件中,使用#[cfg(test)]模块和#[test]属性标记。

1.1 基本测试结构

// 在src/lib.rs或任何模块中
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]  // 只在测试时编译
mod tests {
use super::*;  // 导入外部项
#[test]  // 标记这是一个测试函数
fn test_add() {
assert_eq!(add(2, 2), 4);
}
#[test]
#[should_panic]  // 测试应该panic的情况
fn test_panic() {
panic!("This test should fail");
}
}

1.2 常用断言宏

#[test]
fn test_assertions() {
assert!(true);  // 简单断言
assert_eq!(2 + 2, 4);  // 相等断言
assert_ne!(3, 4);  // 不等断言
let result = std::panic::catch_unwind(|| {
// 可能panic的代码
});
assert!(result.is_err());  // 验证是否panic
}

1.3 测试错误处理

pub fn divide(a: i32, b: i32) -> Result {
if b == 0 {
Err(String::from("Cannot divide by zero"))
} else {
Ok(a / b)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_divide() {
assert_eq!(divide(10, 2), Ok(5));
assert_eq!(
divide(10, 0),
Err(String::from("Cannot divide by zero"))
);
}
}

2. 集成测试

集成测试位于单独的tests目录中,测试库的公开API。

2.1 基本集成测试

项目结构:
my_project/
├── Cargo.toml
├── src/
│   └── lib.rs
└── tests/
└── integration_test.rs
// tests/integration_test.rs
use my_project;  // 导入你的库
#[test]
fn test_library_function() {
assert_eq!(my_project:
posted @ 2025-09-02 10:36  wzzkaifa  阅读(7)  评论(0)    收藏  举报