26次发布
| 0.3.14 | 2024年3月4日 |
|---|---|
| 0.3.11 | 2023年5月24日 |
| 0.3.10 |
|
| 0.3.7 | 2022年11月21日 |
| 0.1.2 | 2020年1月20日 |
#14 in 调试
33,384次每月下载
用于105个crate(97个直接使用)
41KB
605 代码行
assert2
多功能assert!(...)和check!(...)宏,受Catch2启发。还有一个默认情况下在优化构建中禁用的debug_assert!(...)宏。此外,还有一个let_assert!(...)宏,它允许你在测试模式的同时捕获其中的一部分。
为什么需要这些宏?
这些宏相对于标准库中的断言提供了一些优势。
- 宏解析你的表达式以检测比较并相应地调整错误信息。不再需要
assert_eq!(a, b)或assert_ne!(c, d),只需编写assert!(1 + 1 == 2),甚至assert!(1 + 1 > 1)! - 你可以测试模式匹配:
assert!(let Err(_) = File::open("/non/existing/file"))。 - 您可以使用
let_assert!(...)宏捕获模式的一部分以进行进一步测试。 check宏可以在恐慌之前执行多个检查。- 当断言失败时,宏提供了比标准
std::assert!()更多的信息。 - 带差异的彩色失败信息!
宏还接受额外的参数以自定义消息,因此与 std::assert 完全兼容。这意味着您可以将宏作为替代品导入
use assert2::assert;
示例
check!(6 + 1 <= 2 * 3);

check!(scrappy == coco);

check!((3, Some(4)) == [1, 2, 3].iter().size_hint());

check!(let Ok(_) = File::open("/non/existing/file"));

let_assert!(Err(e) = File::open("/non/existing/file"));
check!(e.kind() == ErrorKind::PermissionDenied);

assert 与 check
该软件包提供两个宏:check!(...) 和 assert!(...)。主要区别在于 check 主要是针对测试用例,并且不会立即恐慌。相反,它将打印断言错误并使测试失败。这允许您运行多个检查,并有助于更轻松地确定测试失败的原因。另一方面,assert 宏简单地打印错误并恐慌,也可以在测试之外使用。
目前,check 使用作用域保护来延迟恐慌,直到当前作用域结束。理想情况下,check 不会恐慌,而只是表示测试用例失败。如果将来可以实现这一点,则 check 宏将发生变化,所以 您不应该依赖于 check 来恐慌。
稳定版和夜间版的区别。
如果可用,该软件包使用 proc_macro_span 功能来获取原始源代码。在稳定和测试版中,它回退到将表达式字符串化。这使得夜间版本的输出更易于阅读。
let_assert!() 宏
您还可以使用 let_assert!(...)。它与 assert!(let ...) 非常相似,但所有占位符都将作为变量在调用作用域中可用。
这允许您对捕获的变量运行额外的检查。
例如
let_assert!(Ok(foo) = Foo::try_new("bar"));
check!(foo.name() == "bar");
let_assert!(Err(Error::InvalidName(e)) = Foo::try_new("bogus name"));
check!(e.name() == "bogus name");
check!(e.to_string() == "invalid name: bogus name");
控制输出格式。
作为最终用户,您可以通过更改 ASSERT2 环境变量来影响 assert2 格式化失败断言的方式。您可以指定任何选项组合,选项之间用逗号分隔。支持以下选项:
auto:根据断言的长度自动选择紧凑或美观的Debug格式(默认)。pretty:始终使用美观的Debug格式为断言消息({:#?})。compact:始终使用紧凑的Debug格式为断言消息({:?})。no-color:禁用彩色输出,即使输出是发送到终端。color:启用彩色输出,即使输出不是发送到终端。
例如,您可以使用以下命令强制使用带颜色的紧凑 Debug 格式:
ASSERT2=compact,color cargo test
如果未设置 color 或 no-color 选项,则 assert2 遵循 clicolors 规范。
NO_COLOR != 0或CLICOLOR == 0:写入不带颜色代码的纯文本输出。CLICOLOR != 0:当输出是发送到终端时写入彩色输出。CLICOLOR_FORCE != 0:即使不是发送到终端也写入彩色输出。
依赖关系
~1.3–8.5MB
~71K SLoC