测试驱动开发

发布时间: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));
}

练习

通过以下练习提升测试技能:

  1. 为一个简单的计算器实现完整的单元测试
  2. 编写包含 should_panic 测试的用例
  3. 创建一个完整的集成测试套件
返回首页