测试驱动开发
发布时间:2025年1月6日
Rust 测试基础
Rust 内置了对编写软件测试的支持,可以验证代码是否按预期工作。
编写测试
Rust 的测试是带有 test 属性标注的函数:
基本测试示例
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
let result = 2 + 2;
assert_eq!(result, 4);
}
#[test]
fn another() {
panic!("Make this test fail");
}
}
断言宏
Rust 提供了多个断言宏来验证测试结果:
断言示例
#[test]
fn larger_can_hold_smaller() {
let larger = Rectangle {
width: 8,
height: 7,
};
let smaller = Rectangle {
width: 5,
height: 1,
};
assert!(larger.can_hold(&smaller));
assert_eq!(larger.width, 8);
assert_ne!(larger.height, smaller.height);
}
测试私有函数
Rust 允许测试私有函数:
测试私有函数
pub struct Guess {
value: i32,
}
impl Guess {
pub fn new(value: i32) -> Guess {
if value < 1 || value > 100 {
panic!("Guess value must be between 1 and 100");
}
Guess { value }
}
fn value(&self) -> i32 {
self.value
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[should_panic(expected = "Guess value must be between 1 and 100")]
fn greater_than_100() {
Guess::new(200);
}
}
集成测试
集成测试是完全独立于你的库的外部测试:
集成测试示例
// tests/integration_test.rs
use adder;
#[test]
fn it_adds_two() {
assert_eq!(4, adder::add_two(2));
}
#[test]
fn it_handles_zero() {
assert_eq!(2, adder::add_two(0));
}
练习
通过以下练习提升测试技能:
- 为一个简单的计算器实现完整的单元测试
- 编写包含 should_panic 测试的用例
- 创建一个完整的集成测试套件