如何对某个配置下定义的函数进行测试?

How to make a test for a function defined under some configuration?

如何对函数进行单元测试定义了一些配置,如下所示

struct I32Add;
impl I32Add{
    #[cfg(unstable)]
    fn add(x:i32, y:i32) -> i32{x+y}
}

#[test]
fn add_test(){
    assert_eq!(I32Add::add(1,2),3)
}

当然,测试不行。如何让它发挥作用?

您可以像对函数所做的那样将 #[cfg(unstable)] 添加到测试中。所以只有编译该函数时才会编译测试:

#[cfg(unstable)]
#[test]
fn add_test() {
    assert_eq!(I32Add::add(1, 2), 3)
}

要编译您的函数和测试并运行,您必须启用 unstable 配置选项:

RUSTFLAGS="--cfg unstable" cargo test

但是,我建议您使用 cargo feature 而不是配置选项来有条件地启用部分代码库。

struct I32Add;
impl I32Add{
    #[cfg(feature = "unstable")]
    fn add(x:i32, y:i32) -> i32{x+y}
}

#[cfg(feature = "unstable")]
#[test]
fn add_test(){
    assert_eq!(I32Add::add(1,2),3)
}

在你的 cargo.toml:

[features]
unstable = []

然后 运行 它就像:

cargo test --features=unstable

参见:

  • How do I use conditional compilation with `cfg` and Cargo?
  • Is it possible to write a test in Rust so it does not run on a specific operating system?