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?
Your test is incorrect. Quoting the Cargo book :
This can be tested in code via
#[cfg(feature = "foo")]
.
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!
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.