2015-07-27 4 views
0

Предположим, у меня есть программа Rust с некоторыми тестами Blackbox, написанными на sh или Python (например). Есть ли простой способ получить Cargo test, чтобы запустить их?Как выполнить внешние тесты Blackbox от Cargo?

(Я понимаю, что это немного против зерна груза, так как это, вероятно, ввести неотслеживаемые зависимости от инструментов ОС. Но это было бы очень полезно, так как у меня есть некоторые существующие тесты я хочу повторно использовать.)

+0

Пример кода: https://github.com/sourcefrog/conserve/blob/master/tests/run_cram.rs – poolie

ответ

2

Для быстрых и грязных тестов вы можете запускать внешние исполняемые файлы с помощью команды оболочки с std::process::Command. Просто вставьте его в каталог тестов, а так:

#[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, специфичные для внешнего языка.

+0

Спасибо! Кстати, этот аргумент теперь «тест груза - --nocapture», но он покажет выход по умолчанию, если тест завершился неудачно. – poolie

Смежные вопросы