Rust 在 CentOS 上如何进行单元测试

周末不加班
周末不加班
发布时间:2026-08-25| 106人浏览过
原创

前言

在 CentOS 上跑 Rust 单元测试,真正容易卡住的地方通常不是 `cargo test` 本身,而是工具链是否装好、环境变量是否生效、测试代码有没有按 Rust 的约定组织。本文按实际操作顺序把这条链路拆开,保留命令、示例代码和输出结果,方便你快速完成首次测试,也能判断问题出在环境、项目结构还是断言逻辑。

在 CentOS 上把 Rust 单元测试跑通,核心并不在“测试命令有多复杂”,而在于先把工具链、环境变量和项目结构准备到位。下面按实际操作顺序整理一遍,从安装 Rust 到看到测试结果,读者可以据此快速判断自己卡在哪一步,以及 `cargo test` 背后到底做了什么。

安装 Rust 工具链

如果机器上还没有 Rust,第一步先安装官方工具链。常见做法是直接使用 rustup 提供的安装脚本:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

这条命令会下载并执行 Rust 的安装脚本,随后按提示完成安装即可。对于大多数 CentOS 环境来说,这一步就是后续运行 cargo、编译代码和执行测试的前提。

加载环境并确认 cargo 可用

安装完成后,还需要让当前 shell 识别 Rust 的命令行工具。通常做法是重新加载 cargo 环境配置:

source $HOME/.cargo/env

这一步不能省略。否则即便 Rust 已经装好,终端里也可能还找不到 cargo 命令,接下来的建项目和跑测试都会中断。对刚装完工具链的环境来说,先执行一次这条命令,能避免不少无谓排查。

创建测试项目骨架

如果手头还没有现成的 Rust 项目,可以先用 cargo 创建一个最基础的工程,再在这个工程里写测试:

cargo new my_project
cd my_project

cargo new my_project 会生成一个名为 my_project 的项目目录,并准备好基础文件结构。进入项目目录后,就可以开始补充业务代码和对应测试。

这一步的意义不只是“生成一个文件夹”,更重要的是建立 Rust 默认认可的项目布局。后面执行 cargo test 时,Cargo 会基于这套结构去编译和发现测试代码。

在代码中编写单元测试

Rust 的单元测试通常直接写在被测代码所在文件中,并放在 #[cfg(test)] 模块里。下面是一个最基础的示例:

// 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);
    }
}

这里有几个关键信息:

`#[cfg(test)]` 的作用

这个模块只会在测试场景下参与编译,不会作为正常发布代码的一部分始终启用。这样既方便把测试和实现写在一起,也不会影响常规构建。

`#[test]` 如何标记测试函数

带有 #[test] 标记的函数会被测试框架识别出来,cargo test 执行时会自动收集并运行这些函数。

`assert_eq!` 用来校验结果

示例中的 assert_eq!(add(2, 2), 4) 表示把函数返回值和预期值进行比较。如果两边一致,测试通过;如果不一致,Cargo 会输出详细失败信息,帮助定位问题。

使用 cargo test 执行测试

测试写好后,回到项目根目录直接运行:

Rust 工具链安装到执行 cargo test 的流程图
CentOS 上运行 Rust 单元测试的关用流程方式展示在 CentOS 上跑通 Rust 单元测试的最短路径。
cargo test

这条命令会完成几件事:先编译项目,再收集所有带有 #[test] 标记的测试函数,最后逐个执行并输出结果。也就是说,它不是单纯“跑一下脚本”,而是把编译、发现测试和执行测试串成了一次完整流程。

如何理解测试输出结果

如果流程正常,终端里通常会看到类似下面的输出:

Rust 单元测试代码结构与输出结果对应关系示意图
测试代码与终端结果如何对应把 `#[cfg(test)]`、`#[test]`、`assert_eq!`。
running 1 test
test tests::test_add ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

这段输出可以直接用来判断测试状态:

  • running 1 test 表示本次共执行了 1 个测试。
  • test tests::test_add ... ok 表示名为 tests::test_add 的测试已经通过。
  • 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out 则是本次执行的汇总结果。

如果没有看到 ok,而是出现失败信息,也不用急着重装环境。多数情况下,Cargo 给出的报错已经足够定位是断言不成立、函数逻辑错误,还是测试代码本身写得不符合预期。

对刚开始在 CentOS 上使用 Rust 的读者来说,先把这条最基础的单元测试链路跑通,比一开始就堆很多复杂用例更重要。等基础流程稳定后,再去补边界条件、异常输入和更多断言,测试的价值才会逐步体现出来。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。