Rust 在 Ubuntu 上怎么做单元测试:从编写到运行一次讲清

小林子
小林子
发布时间:2026-08-24| 61人浏览过
原创

前言

在 Ubuntu 上做 Rust 开发时,单元测试几乎是开箱即用的,但很多人第一次接触时,仍会卡在测试代码放置方式、命令入口和结果判断上。本文按实际操作顺序整理最基础的一套流程,既保留必要命令和示例代码,也补上“什么时候该用全量运行、什么时候适合定向过滤”的判断线索。

在 Ubuntu 上写 Rust,单元测试通常不需要额外搭框架,Cargo 已经把最常见的能力打包好了。真正容易卡住的地方,不是“能不能测”,而是测试代码该放哪、命令怎么跑、输出结果该怎么判断。下面就按实际开发流程梳理一遍,从项目初始化到定向执行测试,帮你把最基础的一套用法跑通。

先把 Ubuntu 上的 Rust 测试环境准备好

如果机器上还没有 Rust,可以先完成安装。常见做法是直接使用官方提供的 rustup 安装脚本:

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

安装完成后,Rust 一般会自动加入 PATH。如果当前终端还没有生效,可以重新打开终端,或者手动执行一次环境加载。对于 Ubuntu 开发环境来说,这一步完成后,cargo、rustc 以及默认测试工具链就都已经可用了。

如果你还没有现成项目,可以直接创建一个新的 Rust 工程:

cargo new my_project
cd my_project

cargo new 会生成标准项目结构,其中包括源码目录 src 和项目配置文件 Cargo.toml。后面的单元测试,通常就是围绕这个默认结构展开。

Rust 单元测试代码通常怎么写

Rust 的单元测试最常见的写法,是把测试和被测代码放在同一个文件中,再用 #[cfg(test)] 包住测试模块。这样做的好处是,测试代码只会在执行测试时参与编译,不会进入正常构建流程。

展示 Ubuntu 上 Rust 单元测试的基础结构,包括项目初始化、测试模块组织和执行入口。
Rust 单元测试的代码结构与执行关系用一张结构图看清 Rust 单元测试代码放置位置,以及 Cargo 如何发现并执行测试。

一个最基础的例子如下:

// 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)] 隔离测试模块

#[cfg(test)] 表示这部分代码只在测试阶段启用。也就是说,平时执行普通编译时,这个模块不会被纳入构建结果,有助于保持产物干净。

用 #[test] 标记测试函数

只要函数带有 #[test] 标记,cargo test 在运行时就会自动发现并执行它。你不需要额外注册测试用例,也不用手动维护测试列表。

展示 Rust 测试命令的使用场景,包括全量运行、按名称过滤和关闭优化排查。
Rust 测试命令与适用场景对比当测试数量增加后,常用命令的差别主要体现在执行范围和排查目的上。

通过断言验证结果

示例中使用的是 assert_eq! 宏,它会比较实际值和预期值是否一致。对 Rust 初学者来说,这也是最常见、最直接的断言方式,适合先把基础测试流程建立起来。

如何运行测试,以及结果该怎么看

当测试代码写好后,直接执行下面这条命令即可:

cargo test

cargo test 会先编译项目,再执行所有带有 #[test] 标记的测试函数。这也是 Rust 项目里最标准的测试入口。

运行完成后,终端通常会列出每个测试的名称和对应状态。测试全部通过时,你会看到成功信息;如果有测试失败,输出中也会明确指出失败项,以及是哪一条断言没有满足预期。

这类输出的价值在于,它不仅告诉你“失败了”,还会把定位线索一并给出来。实际开发中,很多简单问题只靠 cargo test 的默认输出就能快速找到原因,不一定需要额外启动复杂的调试流程。

只跑指定测试,或在排查时关闭优化

当项目里的测试数量逐渐变多时,每次都完整执行一遍会比较耗时。这时可以只运行名称匹配的测试:

cargo test -k add

这样会筛选出名称中包含 add 的测试并执行,适合你只想快速验证某个函数、模块或某组改动时使用。

另外,在少数排查场景下,如果你希望尽量减少编译器优化带来的干扰,也可以临时关闭优化后再运行测试:

RUSTFLAGS="-C opt-level=0" cargo test

这条命令会在当前执行过程中把优化等级设为 0,让测试行为更贴近源码本身。虽然大多数日常开发不一定需要这么做,但在分析某些异常结果或细节表现时,它仍然是一个实用选项。

Ubuntu 下做 Rust 单元测试,先掌握这套最小闭环

对于 Ubuntu 上的 Rust 开发来说,单元测试的起点并不复杂:安装好 Rust,创建标准项目,在源码文件中写入 #[cfg(test)] 测试模块,再用 cargo test 执行即可。

如果你已经能理解测试模块放置方式、#[test] 的作用,以及基础命令和结果输出,那么就已经具备了继续深入的基础。后续无论是扩展到更多断言、拆分测试结构,还是继续研究更复杂的测试能力,都会顺畅很多。

相关标签:

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

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 算法库。