我正在使用
assert_cli
用于测试命令行应用程序的板条箱。虽然它对简单的用例非常有用(
see some examples in this article
),有时我想获得作为
String
进行更复杂的检查(regex、json或输出中更复杂的逻辑)。
为此,我需要逐字获取命令输出的副本。以下是一个示例:
extern crate assert_cli;
fn main() {
let a = assert_cli::Assert::command(&["echo", "foo-bar-foo"]);
a.execute();
println!("{:?}", a.expect_output);
}
可以预见,它会给我带来以下错误:
error[E0616]: field `expect_output` of struct `assert_cli::Assert` is private
--> src/main.rs:14:22
|
14 | println!("{:?}", a.expect_output);
| ^^^^^^^^^^^^^^^
它还有一个
.stdout()
方法,但这需要
OutputAssertionBuilder
而且,如何访问
实际内容
属于
stdout
。只能使用谓词语法执行一些简单检查。
assert_cli
是否在执行期间内部获得命令的完整输出,如的源代码所示
assert.rs
let output = spawned.wait_with_output()?;
所有内部
Command
和
output
变量似乎是私有的,从不暴露于检索原始
标准装置
。此功能似乎太基本,不能忽略
assert\u cli
图书馆我可能错过了一些非常明显的东西。。。
Q: 有什么办法可以生吃吗
标准装置
作为变量的内容返回?
这是我理想的目标:
extern crate assert_cli;
fn main() {
// do simple checkign with assert_cli
let a = assert_cli::Assert::command(&["echo", "foo-bar-foo"])
.stdout().contains("foo-bar-foo")
.unwrap();
// get raw stdout
let cmd_stdout = a.get_raw_stdout(); // how to do it?
// do some additional complex checking
assert_eq!(cmd_stdout, "foo-bar-foo");
}
P、 S:我知道我可以用
std::process::Command
分别实现这一点。我想知道我是否还能坚持
assert\u cli
因为我用它做了80%的测试。