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

MIT/Apache

36KB
813

必须 —— Rust 的断言库 rustdoc crates.io MIT/Apache-2.0

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