#parameterized #macro #test-cases #generate

parameterized_test

一个宏,用于支持向测试函数提供参数

2 个不稳定版本

0.2.1 2022 年 12 月 10 日
0.2.0 2022 年 12 月 4 日
0.1.0 2020 年 12 月 1 日

#810测试

Download history 313/week @ 2024-03-24 231/week @ 2024-03-31 323/week @ 2024-04-07 287/week @ 2024-04-14 287/week @ 2024-04-21 189/week @ 2024-04-28 236/week @ 2024-05-05 301/week @ 2024-05-12 268/week @ 2024-05-19 229/week @ 2024-05-26 392/week @ 2024-06-02 313/week @ 2024-06-09 292/week @ 2024-06-16 161/week @ 2024-06-23 252/week @ 2024-06-30 396/week @ 2024-07-07

1,105 每月下载次数
用于 task-mon

MIT/Apache

9KB
79

parameterized_test::create!()

crates.io docs.rs build status issues

这个小型 crate 提供了一个 parameterized_test::create!() 宏,用于简化创建具有不同参数的重复测试。

Chris Morgan 的 StackOverflow 帖子 启发,最初在 此答案 中记录,该宏通过动态生成一个新宏来实现,该新宏反过来为传递给生成宏的每个测试用例生成单独的测试。

注意:确切的 API 仍在开发中,可能会在后续(预 1.0)版本中更改。

语法

parameterized_test::create() 需要四个参数

  • 测试组的名称,将用作子模块名称和生成的参数宏的名称。
  • 一个或多个变量名,例如 foo(bar, baz)(注意多个变量必须用括号括起来)。
  • 测试体,多个语句可以包含在 { ... } 中。

示例

此示例创建两个测试用例,分别为 tests::even::bad_casetests::even::good_case

use parameterized_test::create;

#[cfg(test)]
mod tests {
    use super::*;

    parameterized_test::create!{ even, n, { assert_eq!(n % 2, 0); } }
    even! {
        bad_case:  1, // this test case will fail
        good_case: 2,
    }
}

测试还可以指定多个参数

use parameterized_test::create;

#[cfg(test)]
mod tests {
    use super::*;

    parameterized_test::create!{ commutative, (i, j, k), {
      assert_eq!(i, j);
      assert_eq!(j, k);
      assert_eq!(k, i); 
    }}
    commutative! {
        small: (1, 1, 1),
        large: (100, 100, 100),
    }
}

同样支持 ? 操作符,类似于 独立测试

use parameterized_test::create;

#[cfg(test)]
mod tests {
    use super::*;

    parameterized_test::create!{ socket, path, {
      let socket: SocketAddr = fs::read_to_string(path)?.parse()?;
      assert_eq!(socket.is_ipv6(), true);
    }}
  socket! {
        relative: "foo.txt",
        absolute: "/tmp/bar.txt",
    }
}

依赖关系

约33KB