Rust在Linux系统中的单元测试实践
Rust原生支持单元测试,通过内置的#[test]属性和cargo工具链,开发者可以快速编写、运行和管理测试。以下是在Linux系统中进行Rust单元测试的详细流程及常见操作:
1. 准备工作:安装Rust环境
在开始前,需确保Linux系统已安装Rust。推荐通过rustup(Rust官方工具链管理器)安装,命令如下:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env # 将Rust添加到PATH环境变量
安装完成后,通过rustc --version验证是否成功。
2. 创建Rust项目
使用cargo new命令创建新项目(若已有项目可跳过此步):
cargo new my_project # 创建名为my_project的项目
cd my_project # 进入项目目录
项目结构默认包含src/main.rs(可执行程序入口)或src/lib.rs(库项目入口),测试代码通常在此编写。
3. 编写测试代码
Rust的测试代码需放在#[cfg(test)]模块中,该模块仅在运行测试时编译。以下是两种常见场景的示例:
场景1:测试库函数(推荐)
若项目为库(src/lib.rs),可直接在文件中添加测试模块:
// 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); // 断言相等
assert_eq!(add(-1, 1), 0); // 边界值测试
assert_eq!(add(0, 0), 0); // 零值测试
}
}
场景2:测试可执行程序
若项目为可执行程序(src/main.rs),同样可以添加测试模块:
// src/main.rs
fn greet(name: &str) -> String { // 待测试的函数
format!("Hello, {}!", name)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_greet() {
assert_eq!(greet("Alice"), "Hello, Alice!");
assert_eq!(greet(""), "Hello, !");
}
}
fn main() {
println!("{}", greet("World")); // 主程序逻辑
}
测试代码与主逻辑分离,不影响程序正常运行。
4. 运行单元测试
在项目根目录下执行cargo test命令,Cargo会自动完成以下步骤:
- 编译项目(包括测试代码);
- 运行所有标记为
#[test]的函数; - 输出测试结果(包括通过/失败的测试数量、耗时等)。
示例输出:
running 1 test
test tests::test_add ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
5. 常用测试命令选项
cargo test支持多种参数,满足不同测试需求:
查看详细输出
使用--nocapture标志,可显示测试中的println!或dbg!输出(默认情况下,Cargo会捕获输出仅在失败时显示):
cargo test -- --nocapture
运行特定测试
- 通过测试函数名过滤:
cargo test test_add(仅运行test_add函数); - 使用部分名称匹配:
cargo test add(运行所有名称包含add的测试); - 结合
-k标志:cargo test -k "add"(同上,更灵活)。
仅编译测试(不运行)
使用--test标志,可编译测试代码但不执行,用于检查编译错误:
cargo test --test tests # 编译tests模块(默认模块名)
6. 高级实践:测试覆盖率(可选)
若需统计测试覆盖率,可使用cargo-tarpaulin工具(需提前安装):
cargo install cargo-tarpaulin # 安装工具
cargo tarpaulin --ignore-tests # 运行覆盖率检查
该工具会生成HTML报告,显示代码的覆盖情况(如哪些行被测试覆盖、哪些未覆盖)。
通过以上步骤,开发者可以在Linux系统中高效地进行Rust单元测试,确保代码的正确性和稳定性。Rust的测试机制与cargo工具链深度集成,大幅简化了测试流程,提升了开发效率。
以上就是关于“Rust在Linux系统中的单元测试实践”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm