我正在为命令行工具编写测试,该工具可让您指定寻呼机。我想测试该工具是否传递了正确的参数。我以为我要编写一个单行二进制文件来检查参数,如果参数不正确,则返回非零状态码(加上一些STDERR输出),然后在运行该命令的tests/
下进行测试二进制文件并检查其输出,我可以像往常一样使用cargo test
运行它。如果将二进制文件放在src/bin
下,则此设置有效,但是使用cargo install
时也会安装测试二进制文件。
将二进制文件的.rs
文件放在tests/
下时,它根本没有被编译成二进制文件。
我尝试将其放在同一工作区中的一个条板箱下,但是在根条板箱中运行cargo build
时并没有构建它……除非我将其指定为默认成员,在这种情况下,我们将返回它cargo install
时安装。
例如,给出如下代码:
use std::process::Command;
fn run_pager(pager: &str) {
let output = Command::new(&pager)
.env("SOME_VAR", "FOO")
.spawn()
.expect("failed to run pager");
// do something with the command
}
还有一个像这样的存根test-binary.rs
:
use std::env;
fn main() {
assert_eq!(env::var("SOME_VAR").unwrap(), "FOO");
// …produce output with special markers…
}
我该怎么写tests/passes-correct-args.rs
:
#[test]
fn runs_pager_with_args() {
// pass `test-binary` to `run_pager` and verify output
}
答案 0 :(得分:0)
在src
下将测试二进制文件新建一个Cargo项目,然后使用相对路径在您的主项目中将其作为开发依赖项引用。
[dev-dependencies]
test_binary = { path = "src/test_binary", version = "0.1" }