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 测试
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_(0到15)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);