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