如何从Cargo运行外部黑盒测试?

时间:2015-07-27 18:17:39

标签: rust rust-cargo

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

(我意识到这有点违背Cargo的规定,因为它可能会引入未经跟踪的OS工具依赖。但它确实很有用,因为我有一些我想要重用的现有测试。)

1 个答案:

答案 0 :(得分:2)

对于快速而肮脏的测试,您可以通过带有std::process::Command的shell命令运行外部可执行文件。只需将其粘贴到tests目录中,如下所示:

#[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。