如何用 Cargo 管理 Rust 工程系列 戊

以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」mp.weixin.qq.com/s/-OiWtUCUc...

单元和集成测试

Rust 为单元测试提供了非常好的原生支持。

创建库工程时,cargo 生成的源码文件 lib.rs 自带了示例代码,而且包含测试函数,看看代码

rust 复制代码
$ cat lib_rust/src/lib.rs 
pub fn add(left: usize, right: usize) -> usize {
    left + right
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_works() {
        let result = add(2, 2);
        assert_eq!(result, 4);
    }
}

函数 add 实现两数求和,测试函数的 it_works 实现对函数 add 的测试。

cargo 提供了 test 指令启动单元测试

bash 复制代码
$ cd lib_rust
$ cargo test
   Compiling lib_rust v0.1.0 (~/lib_rust)
    Finished test [unoptimized + debuginfo] target(s) in 1.67s
     Running unittests src/lib.rs (target/debug/deps/lib_rust-996ac7b1e383793c)

running 1 test
test tests::it_works ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests lib_rust

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

测试过程反映了每个测试函数的结果,以及汇总。

Cargo 运行的背后

看完上面的内容,不禁想问每次运行 cargo 指令时,它到底在干什么?

执行 cargo 指令时加上 -v 选项,可以把执行过程的详细信息打印出来。那么,来看看 cargo 清理中间文件和重新执行编译构建的详细过程

scss 复制代码
$ cd hello_rust/
$ cargo clean -v
    Removing ~/hello_rust/target
$ cargo build -v
   Compiling hello_rust v0.1.0 (~/hello_rust)
     Running `~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/rustc --crate-name hello_rust --edition=2021 src/main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=89 --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debuginfo=2 -C metadata=60af8441ea417b4f -C extra-filename=-60af8441ea417b4f --out-dir ~/hello_rust/target/debug/deps -C incremental=~/hello_rust/target/debug/incremental -L dependency=~/hello_rust/target/debug/deps`
    Finished dev [unoptimized + debuginfo] target(s) in 0.83s

可见,cargo 其实是一个包装器(wrapper),在执行编译构建时调用编译器 rustc,清理中间文件就是直接删掉文件夹 target。

编译第三方 Rust 包

目前为止,上面提到的技巧都以自建工程包为基础,但是也可以运用在从网上获取到的 Rust crate(包)。对待这些第三方包,就是下载下来,或者用 git 克隆它的仓库代码到本地,然后进入包文件夹并启动构建

bash 复制代码
git clone <xxx>
cd <package-folder>
cargo build

more

关于更多的 cargo 用法,可以查看帮助

shell 复制代码
$ cargo --help

本文目标是简单介绍一般开发流程里会用到的 Cargo 构建技巧,尝试抛砖引玉,帮助 rust 初学者上手工具 cargo 的使用,不旨在面面俱到,如果你对 cargo 特别感兴趣还可以去看看《cargo book》。

本系列文章已结束,谢谢各位读者朋友的支持...

相关推荐
鸿乃江边鸟12 小时前
Spark Datafusion Comet 向量化Rust Native--创建Datafusion计划
rust·spark·native
咸甜适中12 小时前
rust的docx-rs库,自定义docx模版批量分页生成一个docx文档(方便打印)(逐行注释)
rust·办公自动化·docx-rs
Vallelonga12 小时前
Rust Option.as_ref() 方法
开发语言·rust
大卫小东(Sheldon)1 天前
GIM 2.0 发布:真正让 AI 提交消息可定制、可控、可项目级优化
git·rust·gim
roamingcode2 天前
我是如何 Vibe Coding,将 AI CLI 工具从 Node.js 迁移到 Rust 并成功发布的
人工智能·rust·node.js·github·claude·github copilot
初恋叫萱萱2 天前
构建高性能生成式AI应用:基于Rust Axum与蓝耘DeepSeek-V3.2大模型服务的全栈开发实战
开发语言·人工智能·rust
superman超哥3 天前
Serde 性能优化的终极武器
开发语言·rust·编程语言·rust serde·serde性能优化·rust开发工具
sayang_shao3 天前
Rust多线程编程学习笔记
笔记·学习·rust
鸿乃江边鸟4 天前
Spark Datafusion Comet 向量化Rust Native--读数据
rust·spark·native·arrow
硬汉嵌入式4 天前
基于Rust构建的单片机Ariel RTOS,支持Cortex-M、RISC-V 和 Xtensa
单片机·rust·risc-v