简体   繁体   中英

How does one test optional features in Rust?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM