以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」mp.weixin.qq.com/s/-OiWtUCUc…
单元和集成测验
Rust 为单元测验供给了非常好的原生支持。
创立库工程时,cargo 生成的源码文件 lib.rs 自带了示例代码,而且包含测验函数,看看代码
$ 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 指令发动单元测验
$ 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 清理中心文件和从头履行编译构建的具体进程
$ 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 克隆它的库房代码到本地,然后进入包文件夹并发动构建
git clone <xxx>
cd <package-folder>
cargo build
more
关于更多的 cargo 用法,能够检查协助
$ cargo –help
本文目标是简单介绍一般开发流程里会用到的 Cargo 构建技巧,测验抛砖引玉,协助 rust 初学者上手工具 cargo 的使用,不旨在八面玲珑,如果你对 cargo 特别感兴趣还能够去看看《cargo book》。
本系列文章已结束,谢谢各位读者朋友的支持…