【问题标题】:How to run external blackbox tests from Cargo?如何从 Cargo 运行外部黑盒测试?
【发布时间】:2015-07-27 18:17:38
【问题描述】:

假设我有一个 Rust 程序,其中包含一些用 sh 或 Python 编写的黑盒测试(例如)。有没有简单的方法让Cargo test 运行它们?

(我意识到这有点违背 Cargo 的原则,因为它可能会引入对操作系统工具的未跟踪依赖项。但它真的很有用,因为我有一些想要重用的现有测试。)

【问题讨论】:

标签: rust rust-cargo


【解决方案1】:

对于快速而简单的测试,您可以通过带有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,但如果测试失败,它会默认显示输出。
猜你喜欢
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多