【发布时间】:2015-07-27 18:17:38
【问题描述】:
假设我有一个 Rust 程序,其中包含一些用 sh 或 Python 编写的黑盒测试(例如)。有没有简单的方法让Cargo test 运行它们?
(我意识到这有点违背 Cargo 的原则,因为它可能会引入对操作系统工具的未跟踪依赖项。但它真的很有用,因为我有一些想要重用的现有测试。)
【问题讨论】:
标签: rust rust-cargo
假设我有一个 Rust 程序,其中包含一些用 sh 或 Python 编写的黑盒测试(例如)。有没有简单的方法让Cargo test 运行它们?
(我意识到这有点违背 Cargo 的原则,因为它可能会引入对操作系统工具的未跟踪依赖项。但它真的很有用,因为我有一些想要重用的现有测试。)
【问题讨论】:
标签: rust rust-cargo
对于快速而简单的测试,您可以通过带有std::process::Command 的shell 命令运行外部可执行文件。只需将其粘贴到测试目录中,如下所示:
#[test]
fn it_works() {
use std::process::Command;
let output = Command::new("python.exe")
.arg("test.py")
.output()
.unwrap_or_else(|e| { panic!("failed to execute process: {}", e) });
let s = match String::from_utf8(output.stdout) {
Ok(v) => v,
Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
};
println!("result: {}", s); //must run "cargo test -- --nocapture" to see output
}
对于比这更复杂的事情,您必须使用特定于外部语言的 FFI。
【讨论】:
cargo test -- --nocapture,但如果测试失败,它会默认显示输出。