#单元测试 #断言 # #单元 #测试

totems

单元测试或其他用途的断言宏集合

18 个版本

0.2.7 2019年6月22日
0.2.6 2019年5月7日
0.1.9 2019年5月4日
0.1.0 2019年4月30日

#342 in 测试

Download history 44/week @ 2024-04-01 10/week @ 2024-04-08 12/week @ 2024-04-15 16/week @ 2024-04-22 28/week @ 2024-04-29 14/week @ 2024-05-06 16/week @ 2024-05-13 11/week @ 2024-05-20 22/week @ 2024-05-27 16/week @ 2024-06-03 9/week @ 2024-06-10 16/week @ 2024-06-17 15/week @ 2024-06-24 32/week @ 2024-07-01 2/week @ 2024-07-08 15/week @ 2024-07-15

65 个月下载量
4 crates 中使用

自定义许可证

130KB
3K SLoC

totems

Rust 单元测试的轻量级断言宏集合。

我开始这个项目只是为了更多地练习在 Rust 中编写宏。除了可能更友好的错误信息之外,这里没有什么是用一个或多个常规 assert!() 宏无法完成的。

话虽如此,我特别喜欢(并且实际使用)assert_ok!()assert_err!()assert_some!() 宏,它们可以与比较一起检查枚举的状态和同一行的内部值,这就是为什么这个包存在的原因。

枚举

assert_ok!()

语法

use totems::assert_ok;
let result = "5".parse::<u32>();
assert_ok!(&result);

相当于

assert!(result.is_ok());

assert_ok!()带有比较

语法

use totems::assert_ok;
let result = "5".parse::<u32>();
assert_ok!(&result, value == &5);
assert_ok!(&result, value != &0);
assert_ok!(&result, value <  &6);
assert_ok!(&result, value <= &6);
assert_ok!(&result, value >  &4);
assert_ok!(&result, value >= &4);

相当于

assert!(result.is_ok())
assert!(result.unwrap() >= 4);

assert_err!()

语法

use totems::assert_err;
let result = "z".parse::<u32>();
assert_err!(&result);

相当于

assert!(result.is_err());

assert_err!()带有比较

语法

use totems::assert_err;
let result: Result<(), u32> = Err(5);
assert_err!(&result, value == &5);
assert_err!(&result, value != &0);
assert_err!(&result, value <  &6);
assert_err!(&result, value <= &5);
assert_err!(&result, value >  &4);
assert_err!(&result, value >= &5);

相当于

assert!(result.is_err());
assert!(result.err().unwrap() >= 5);

assert_some!()

语法

use totems::assert_some;
let option = "5".parse::<u32>().ok();
assert_some!(&option);

相当于

assert!(option.is_some());

assert_some!()带有比较

语法

use totems::assert_some;
let option = "5".parse::<u32>().ok();
assert_some!(&option, value == &5);
assert_some!(&option, value != &0);
assert_some!(&option, value <  &6);
assert_some!(&option, value <= &6);
assert_some!(&option, value >  &4);
assert_some!(&option, value >= &4);

相当于

assert!(option.is_some());
assert!(option.unwrap() >= 4);

assert_none!()

语法

use totems::assert_none;
let option = "z".parse::<u32>().ok();
assert_none!(&option);

相当于

assert!(option.is_none());

元组

assert_(015)th

语法

use totems::{assert_0th, ..., assert_15th} // pseudocode
let tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, "Hello");
let x = 1;
assert_0th!(&tuple, value >= &x); // tuple.0 >= x
assert_1st!(&tuple, value >= &x);
assert_2nd!(&tuple, value >= &x);
assert_3rd!(&tuple, value >= &x);
assert_4th!(&tuple, value >= &x);
assert_5th!(&tuple, value >= &x);
assert_6th!(&tuple, value >= &x);
assert_7th!(&tuple, value >= &x);
assert_8th!(&tuple, value >= &x);
assert_9th!(&tuple, value >= &x);
assert_10th!(&tuple, value >= &x);
assert_11th!(&tuple, value >= &x);
assert_12th!(&tuple, value >= &x);
assert_13th!(&tuple, value >= &x);
assert_14th!(&tuple, value >= &x);
assert_15th!(&tuple, value >= &x);

相当于

assert!(tuple.0 >= x);
...
assert!(tuple.15 >= x);

集合

assert_contains!()

语法

use totems::assert_contains;
let vec = vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
let x = 5;
assert_contains!(&vec, &x);

相当于

assert!(vec.contains(&x));

assert_all!()

语法

use totems::assert_all;
let vec = vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
assert_all!(&vec, |&x| x > 0, "all > 0");

相当于

assert!(vec.iter().all(|&x| x > 0));

assert_any!()

语法

use totems::assert_any;
let vec = vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
assert_any!(&vec, |&x| x > 0, "any > 0");

相当于

assert!(vec.iter().any(|&x| x > 0));

assert_nth!()

语法

use totems::assert_nth;
let vec = vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
let x = 5;
assert_nth!(&vec, 2, value == &x); // vec[2] == x
assert_nth!(&vec, 2, value <= &x);
assert_nth!(&vec, 2, value >= &x);
assert_nth!(&vec, 2, value < &(x + 1));
assert_nth!(&vec, 2, value > &(x - 1));

相当于

assert!(vec[2] >= x);

不等式

语法

use totems::{assert_lt, assert_le, assert_gt, assert_ge};
assert_lt!(x, y) // less than
assert_le!(x, y) // less or equal

assert_gt!(x, y) // greater than
assert_ge!(x, y) // greater or equal

相当于

assert!(x <  y);
assert!(x <= y);
assert!(x >  y);
assert!(x >= y);

没有运行时依赖