【问题标题】:How to make a test for a function defined under some configuration?如何对在某些配置下定义的功能进行测试?
【发布时间】:2021-12-17 19:50:18
【问题描述】:

如何对定义了如下配置的函数进行单元测试

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)
}

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

【问题讨论】:

  • @kmdreko 这将禁用/启用启用/禁用该功能的测试。我的问题是如何进行单元测试,即在同一个板条箱中。
  • 我的建议是将#[cfg(unstable)] 添加到您的测试中,就像您为函数as shown here 所做的那样。这样,如果该功能不存在,则测试不存在,因此您不会遇到编译问题。这不是问题所在吗?
  • “我的问题是如何进行单元测试,即在同一个 crate 中。” - 我不确定我是否理解,add_test i> 一个单元测试,它和I32Add在同一个板条箱中...
  • @kmdreko 测试不起作用。 ``` running 0 tests 测试结果:ok。 0通过; 0 失败; 0 忽略; 0 测量; 0 过滤掉;在 0.00 秒内完成运行 0 次测试测试结果:好的。 0通过; 0 失败; 0 忽略; 0 测量; 0 过滤掉;在 0.00 秒内完成```

标签: unit-testing rust cfg crate-feature


【解决方案1】:

您可以将#[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

见:

【讨论】:

    猜你喜欢
    • 2021-03-21
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2019-07-29
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多