Reputation: 9347
I would like to compile a binary which runs a certain subset of tests. When I run the following, it works:
ubuntu@ubuntu-xenial:/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
When I try to run target/debug/deps/ox-824a031ff1732165
, it runs all my tests, not just the 9 specified in hash::vec
.
I've tried to run cargo rustc --test hash::vec
but I get
error: no test target named
hash::vec.
cargo rustc -- --testworks, but creates a binary that runs all tests. If I try
cargo rustc -- --test hash::vec`, I get:
Compiling ox v0.1.0 (file:///ox)
error: multiple input filenames provided
error: Could not compile `ox`.
cargo rustc -h
says that you can pass NAME with the --test
flag (--test NAME Build only the specified test target
), so I'm wondering what "NAME" is and how to pass it in so I get a binary that only runs the specified 9 tests in hash::vec
.
Upvotes: 0
Views: 1028
Reputation: 2595
This functionality has found its way into Cargo. cargo build
now has a parameter
--test [<NAME>] Build only the specified test target
which builds a binary with the specified set of tests only.
Upvotes: -1
Reputation: 59155
You can't, at least not directly.
In the case of cargo test hash::vec
, the hash::vec
is just a substring matched against the full path of each test function when the test runner is executed. That is, it has absolutely no impact whatsoever on which tests get compiled, only on which tests run. In fact, this parameter is passed to the test runner itself; Cargo doesn't even interpret it itself.
In the case of --test NAME
, NAME
is the name of the test source. As in, passing --test blah
tells Cargo to build and run the tests in tests/blah.rs
. It's the same sort of argument as --bin NAME
(for src/bin/NAME.rs
) and --example NAME
(for examples/NAME.rs
).
If you really want to only compile a particular subset of tests, the only way I can think of is to use conditional compilation via features. You'd need a package feature for each subset of tests you want to be able to enable/disable.
Upvotes: 3