5 个版本
使用旧的 Rust 2015
0.2.0 | 2016年12月8日 |
---|---|
0.1.3 | 2016年12月7日 |
0.1.2 | 2016年12月7日 |
0.1.1 | 2016年12月6日 |
0.1.0 | 2016年12月6日 |
#12 在 #macro-use
36KB
813 行
必须 —— Rust 的断言库
must 是一个 Rust 的断言库。
lib.rs
:
用法
将 must
添加到您的 Cargo.toml 文件中。
[dev-dependencies]
must = "0.2.*"
然后添加
#[cfg_attr(test, macro_use)]
#[cfg(test)]
extern crate must;
到您的 根模块。
然后添加
use must::prelude::*;
您的测试模块。
功能
- 懒加载。您可以在断言后使用 .with_msg()。
- 流畅。
- 您可以构建自己的可组合测试工具。请参阅 懒加载模块 以获取完整示例。
let parser: fn(&str) -> Result<Lit, ParseError> = parse_lit;
parser.must_parse("false").as_ok(Lit::Bool(false)); // .or(fail!()) is optional
parser.must_parse("true").as_ok(Lit::Bool(true)).or(fail!());
parser.must_parse("352").as_ok(Lit::Num(352)).or(fail!());
它是如何工作的?
- 如果值没有被用户明确取走,则在释放时崩溃。
- 因为它推迟了崩溃,所以几乎可以在任何地方使用 with_msg()。
示例(用法)
#[macro_use] extern crate must;
use must::prelude::*;
// fail!() is optional, and if not called, it will panic on drop.
// but as it's value is not used, it will be dropped right after one assertion chain.
Some(5u8).must_be_some_and(|val| {
val.must_be(5) // closure must return assertion
}).or(fail!("your msg {}", "and args"));
// fail! macro captures location, so you can know source of panic without backtrace.
// fail! macro supports optional formatting.
// As value is printed by must, you don't have to put it in format args.
fn double(x: usize) -> usize {
x * 2
}
10.must_be_in_range(10..);
10.must_not_be_in_range(..10);
double(10).must_be_in_range(..);
double(10).must_not_be_in_range(..20);
示例(使用构建器风格扩展 must)
请参阅 懒加载模块。
依赖项
~405KB