Rust 中的测试:单元测试、集成测试与基准测试快速指南

更新于 2026-01-15

Tramposo 2024-10-16

Rust 内置的测试框架使得确保代码按预期工作变得非常简单。下面我们来探讨 Rust 中三种主要的测试类型:单元测试(Unit Tests)、集成测试(Integration Tests)和基准测试(Benchmarks)。

单元测试(Unit Tests)

Rust 中的单元测试通常是小型且专注的测试,用于验证单个函数或模块的行为。它们通常写在与被测代码相同的文件中。

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

    #[test]
    fn it_works() {
        let result = add(2, 2);
        assert_eq!(result, 4);
    }
}

fn add(a: i32, b: i32) -> i32 {
    a + b
}

关键点:

  • 使用 #[cfg(test)] 属性,仅在运行测试时才编译测试代码。
  • 每个测试函数都使用 #[test] 注解进行标记。
  • 使用断言宏(如 assert_eq!)来验证结果是否符合预期。

集成测试(Integration Tests)

集成测试用于验证库中不同部分是否能协同工作。它们位于项目根目录下的 tests 目录中。

// 在 tests/integration_test.rs 文件中
use yourcrate_name;

#[test]
fn test_complex_operation() {
    let result = yourcrate_name::complex_operation();
    assert!(result.is_ok());
}

关键点:

  • tests 目录中的每个文件都会被编译为一个独立的 crate。
  • 它们只能测试你库的公共 API(public API)。
  • 使用 cargo test 命令运行这些测试。

基准测试(Benchmarks)

基准测试用于衡量代码的性能。在 Rust 中,基准测试功能目前仍处于不稳定状态,需要使用 nightly 工具链

#![feature(test)]

extern crate test;

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

    #[bench]
    fn bench_add(b: &mut Bencher) {
        b.iter(|| add(2, 2));
    }
}

关键点:

  • 使用 #![feature(test)] 启用基准测试功能。
  • 基准测试函数使用 #[bench] 注解进行标记。
  • 使用 cargo bench 命令运行基准测试。

请记住,编写测试对于维护代码质量以及尽早发现 bug 至关重要。Rust 的测试框架使你能够轻松地为项目创建全面的测试套件。