在 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)] 包住测试模块。这样做的好处是,测试代码只会在执行测试时参与编译,不会进入正常构建流程。

一个最基础的例子如下:
// 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 在运行时就会自动发现并执行它。你不需要额外注册测试用例,也不用手动维护测试列表。

通过断言验证结果
示例中使用的是 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] 的作用,以及基础命令和结果输出,那么就已经具备了继续深入的基础。后续无论是扩展到更多断言、拆分测试结构,还是继续研究更复杂的测试能力,都会顺畅很多。









