如何测试 Rust 中的可选功能?

How does one test optional features in Rust?

我有一个要添加可选功能的包。我在我的 Cargo.toml:

中添加了一个适当的部分
[features]
foo = []

我为 cfg! 宏的基本功能写了一个实验测试:

#[test]
fn testing_with_foo() {
    assert!(cfg!(foo));
}

看来我可以在测试期间通过选项 --features--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

但是 cargo test --features foo testing_with_foocargo test --all-features testing_with_foo 都不起作用。

执行此操作的正确方法是什么?

您的测试不正确。引用 the Cargo book:

This can be tested in code via #[cfg(feature = "foo")].

@Jmb 提出的解决方案:assert!(cfg!(feature = "foo"));。 Cargo Book 中的内容

This can be tested in code via #[cfg(feature = "foo")].

允许确认条件编译是否有效,但不提供可以测试的布尔值。如果要在运行时根据特征进行分支,需要cfg!.