2017-06-01 145 views
0

我想编译运行某个测试子集的二进制文件。当我运行下面的,它的工作原理:将特定测试编译为二进制文件

[email protected]:/ox$ cargo test hash::vec 
    Finished dev [unoptimized + debuginfo] target(s) in 0.11 secs 
    Running target/debug/deps/ox-824a031ff1732165 

running 9 tests 
test hash::vec::test_hash_entry::test_get_offset_tombstone ... ok 
test hash::vec::test_hash_entry::test_get_offset_value ... ok 
test hash::vec::test_hash_table::test_delete ... ok 
test hash::vec::test_hash_table::test_delete_and_set ... ok 
test hash::vec::test_hash_table::test_get_from_hash ... ok 
test hash::vec::test_hash_table::test_get_non_existant_from_hash ... ok 
test hash::vec::test_hash_table::test_override ... ok 
test hash::vec::test_hash_table::test_grow_hash ... ok 
test hash::vec::test_hash_table::test_set_after_filled_with_tombstones ... ok 

test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out 

当我尝试运行target/debug/deps/ox-824a031ff1732165,它运行了所有的考试,不只是在hash::vec指定的9。

我试着运行cargo rustc --test hash::vec,但我得到 error: no test target named哈希:: VEC .货物rustc - --test works, but creates a binary that runs all tests. If I try货物rustc - --test哈希:: vec`,我得到:

Compiling ox v0.1.0 (file:///ox) 
error: multiple input filenames provided 

error: Could not compile `ox`. 

cargo rustc -h说你可以通过NAME --test标志(--test NAME Build only the specified test target),所以我想知道“NAME”是什么,以及如何传递它,所以我得到一个二进制文件,只运行在hash::vec指定的9个测试。

回答

2

你不能,至少不能直接。

cargo test hash::vec的情况下,hash::vec只是针对每个测试功能当测试运行时执行的完整路径相匹配的子串。也就是说,对于哪些测试被编译完全没有影响,只有在哪些测试运行。实际上,这个参数被传递给测试运行器本身;货物甚至没有解释它本身。

--test NAME的情况下,NAME是测试的名称来源。如在,通过--test blah告诉货物建立和运行在tests/blah.rs的测试。它与--bin NAME(对于src/bin/NAME.rs)和--example NAME(对于examples/NAME.rs)具有相同的参数。

如果你真的只想编译一个特定的测试子集,我能想到的唯一方法是通过功能使用条件编译。对于希望启用/禁用的每个测试子集,您都需要一个软件包功能。

+0

啊好的,这实际上回答了我的问题。我真正需要做的是运行我的测试子集(我试图运行valgrind来检测内存泄漏)。将哈希:: vec传递给二进制文件正是我所需要的。谢谢! – user1413793

相关问题