我有一个 Rust 测试,它使用doctest委托给 C++ 测试套件,并希望将命令行参数传递给它。我的第一次尝试是
// in mod ffi
pub fn run_tests(cli_args: &mut [String]) -> bool;
#[test]
fn run_cpp_test_suite() {
let mut cli_args: Vec<String> = env::args().collect();
if !ffi::run_tests(
cli_args.as_mut_slice(),
) {
panic!("C++ test suite reported errors");
}
}
因为cargo test help
显示
USAGE:
cargo.exe test [OPTIONS] [TESTNAME] [-- <args>...]
我期望
cargo test -- --test-case="X"
让run_cpp_test_suite
访问和传递--test-case="X"
参数。但事实并非如此;我得到error: Unrecognized option: 'test-case'
并cargo test -- --help
显示它有一组固定的选项
Usage: --help [OPTIONS] [FILTER]
Options:
--include-ignored
Run ignored and not ignored tests
--ignored Run only ignored tests
...
我的另一个想法是在环境变量中传递参数,即
DOCTEST_ARGS="--test-case='X'" cargo test
但是我需要在 Rust 或 C++ 中以某种方式将该字符串拆分为参数(至少正确处理空格和引号)。