3 个版本
0.1.2 | 2023年10月29日 |
---|---|
0.1.1 | 2023年10月28日 |
0.1.0 | 2023年10月23日 |
#1674 in Rust 模式
11KB
99 行
suitest
一个提供过程宏的库,用于轻松设置测试钩子和配置测试状态。
示例
#![cfg(test)]
use suitest::{suite, suite_cfg};
#[suite(my_test_suite)]
#[suite_cfg(sequential = false, verbose = true)]
pub mod tests {
use suitest::{after_all, after_each, before_all, before_each, cleanup};
#[derive(Debug, Clone)]
struct MyTestStruct {
qux: usize,
}
#[cleanup]
fn cleaning() {
println!("cleaning");
}
#[before_all]
async fn setup() -> (usize, MyTestStruct) {
(420_usize, MyTestStruct { qux: 69 })
}
#[before_each]
fn beach() -> (u8, String) {
(69_u8, String::from("works"))
}
#[after_each]
fn aeach(works: String) {
assert_eq!(works, "works")
}
#[after_all]
async fn teardown(bar: usize, my_stuff: MyTestStruct) {
assert_eq!(bar, 420);
assert_eq!(my_stuff.qux, 69);
}
#[test]
fn works(works: String, foo: u8, bar: usize, my_stuff: MyTestStruct) {
assert_eq!(works, "works");
assert_eq!(foo, 69);
assert_eq!(bar, 420);
assert_eq!(my_stuff.qux, 69);
}
#[test]
async fn works_too(works: String, foo: u8, bar: usize, my_stuff: MyTestStruct) {
assert_eq!(works, "works");
assert_eq!(foo, 69);
assert_eq!(bar, 420);
assert_eq!(my_stuff.qux, 69);
}
}
工作原理
使用 suitest::suite
标注您想要作为测试套件的模块,您可以使用钩子标注其中的函数。
使用 suitest::suite_cfg
并传递参数来配置套件。
像平时一样使用 #[test]
标记测试,suitest 使用这些标注将函数注册为生成的测试套件中的测试。最后将生成一个单独的测试来运行套件。
可用的钩子有
before_all
- 在套件开始时运行
before_each
- 在套件中的每个测试之前运行
after_each
- 在套件中的每个测试之后运行
after_all
- 在整个套件通过后运行
cleanup
- 在任何测试失败后运行。理想情况下不应panic。
suitest 与异步函数一起工作,但依赖于 tokio,因此您需要在依赖关系中包含它。任何钩子和测试都可以标记为异步,您可以使用异步钩子与同步测试混合使用,反之亦然。
配置
suite_cfg
是可选的,并接受以下内容
sequential= bool [false]
- 如果为 true,则依次运行测试。同步测试在异步测试之前执行。套件中的所有测试总是执行。
verbose= bool [false]
- 打印 suitest 在底层执行的操作,对调试很有用。
状态
测试套件由两种类型的状态组成;全局状态,在整个测试套件中可用,和局部状态,局部于测试。
只有 *_all
钩子可以修改全局状态中的项。测试和局部钩子只能从中读取。
带有 *_each
的钩子可以修改局部测试状态中的项。每个测试都会得到在这些钩子中提供的状态的副本,该状态也是只读的。
要将项目添加到上述描述的状态中,您只需使钩子返回一个任意元组即可。这将生成代码,将提供的参数插入到状态中。
要获取项目,请将必要的参数添加到函数的参数中。局部状态优先于全局状态。
每个状态可以存储每个类型的一个值。这意味着如果您在状态中插入任何类型的多次,只有最后一条记录将出现在映射中。如果您需要插入同一类型的多个值,请使用元组。
每个钩子和测试都会先尝试从其局部状态检索项目,然后再尝试从全局状态检索。如果两者都找不到,测试/钩子会引发恐慌。
依赖项
~3–4.5MB
~81K SLoC