gpt4 book ai didi

testing - 如何测试 Rust 程序传递给另一个程序的参数?

转载 作者:行者123 更新时间:2023-11-29 08:20:27 24 4
gpt4 key购买 nike

我正在为一个命令行工具编写测试,它可以让你指定一个寻呼机。我想测试该工具是否传递了正确的参数。我想我会写一个单行二进制文件来检查参数并在它们不正确时以非零状态代码(加上一些 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
}

还有一个如下所示的 stub 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
}

最佳答案

将您的测试二进制文件作为 src 下的新 Cargo 项目,然后在您的主项目中使用相对路径将其作为开发依赖项引用。


[开发依赖]
test_binary = { path = "src/test_binary", version = "0.1"}

关于testing - 如何测试 Rust 程序传递给另一个程序的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52205295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com