十四、测试 (Testing)

发布于:2025-09-02 ⋅ 阅读:(14) ⋅ 点赞:(0)

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<i32, String> {
    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:

网站公告

今日签到

点亮在社区的每一天
去签到