在Rust中,编写单元测试非常简单。Rust的包管理器和构建系统Cargo支持单元测试,并且测试代码与正常代码位于同一个文件中。测试函数以test
为前缀,并使用#[test]
属性标记。
以下是一个简单的Rust单元测试示例:
cargo new my_project
cd my_project
打开src/lib.rs
(如果你正在编写库)或src/main.rs
(如果你正在编写可执行程序)文件。
在文件中编写你的函数和测试。例如:
// src/lib.rs 或 src/main.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(1, 2), 3);
assert_eq!(add(-1, 1), 0);
assert_eq!(add(0, 0), 0);
}
}
在这个例子中,我们定义了一个名为add
的简单函数,它接受两个i32
参数并返回它们的和。然后,我们创建了一个名为tests
的模块,并在其中编写了一个名为test_add
的测试函数。#[cfg(test)]
属性告诉Cargo这个模块只应在运行测试时编译。
assert_eq!
宏用于检查两个值是否相等。如果它们不相等,测试将失败并显示错误消息。
在项目根目录下,使用以下命令运行测试:
cargo test
这将编译你的项目并运行所有标记为#[test]
的测试函数。测试结果将显示在终端中,包括通过的测试数量和失败的测试(如果有)。
如果你想查看更详细的测试输出,可以使用--nocapture
标志:
cargo test -- --nocapture
这将允许你在测试输出中看到println!
语句的结果。
这就是在Rust中编写和运行单元测试的基本方法。你可以根据需要添加更多的测试函数和模块,以确保你的代码按预期工作。