0%

Rust开发命令行工具 001_3 Hello World 为测试添加依赖项

目前来看, hello程序只存在于target/debug。 但是,如果我把它拷贝到环境变量PATH的任意一个目录里的话, 我就能成功运行测试了。不过,我并不想这么干, 我只想在当前的crate里进行测试。可以使用assert_cmd 这个crate, 它可以在当前的crate目录下找到对应的程序。
首先要做的就是把它加入到Cargo.tomldevelopment dependency 里。这将告诉Cargo,要加入的这个crate只在测试和性能测试(benchmarking)时使用。

Cargo.toml

1
2
3
4
5
6
7
8
9
[package]
name = "hello"
version = "0.1.0"
edition = "2018"

[dependencies]

[dev-dependencies]
assert_cmd = "1"

现在我就可以新建一个Command, 它会去Cargo的二进制目录里找。 下面的测试先不验证程序数据是否正确,先看看能不能成功。更新一下代码吧:

1
2
3
4
5
6
7
8
9
10
use assert_cmd::Command; // 用来导入assert_cmd::Command

#[test]
fn runs() {
// 新建一个Command运行当前crate里的hello程序
// 返回一个Result值,我假设可以被成功的Result::unwrap,因为可以找到hello程序。
let mut cmd = Command::cargo_bin("hello").unwrap();
// 断言程序被成功执行
cmd.assert().success();
}

有关于Result,它的内容很多, 现在暂时只需要知道它里面的值可能是成功:Ok,也可能是失败:Err。

欢迎关注我的其它发布渠道