I have a package I want to add an optional feature to. I've added an appropriate section to my Cargo.toml:
[features]
foo = []
I wrote an experimental test for the basic functionality of the cfg!
macro:
#[test]
fn testing_with_foo() {
assert!(cfg!(foo));
}
It looks as though I can activate features during testing via either of the options --features
or --all-features
:
(master *=) $ cargo help test
cargo-test
Execute all unit and integration tests and build examples of a local package
USAGE:
cargo test [OPTIONS] [TESTNAME] [-- <args>...]
OPTIONS:
-q, --quiet Display one character per test instead of one line
...
--features <FEATURES>... Space-separated list of features to activate
--all-features Activate all available features
Neither cargo test --features foo testing_with_foo
nor cargo test --all-features testing_with_foo
works, though.
What is the proper way to do this?
The solution is what @Jmb proposed: assert!(cfg!(feature = "foo"));
. What it says in the Cargo Book
This can be tested in code via
#[cfg(feature = "foo")]
.
allows one to confirm that conditional compilation works but doesn't provide a boolean value one can test against. If you want to branch based on the feature at runtime, you need cfg!
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With