#check #unit-testing #assert #error-message #test #output-format

开发工具 assert2

受Catch2启发的assert!(...)和check!(...)宏,现在带有差异功能!

26次发布

0.3.14 2024年3月4日
0.3.11 2023年5月24日
0.3.10 2023年2月14日
0.3.7 2022年11月21日
0.1.2 2020年1月20日

#14 in 调试

Download history 4075/week @ 2024-04-14 3948/week @ 2024-04-21 3582/week @ 2024-04-28 3215/week @ 2024-05-05 4164/week @ 2024-05-12 4370/week @ 2024-05-19 3625/week @ 2024-05-26 4086/week @ 2024-06-02 5555/week @ 2024-06-09 6797/week @ 2024-06-16 7838/week @ 2024-06-23 5550/week @ 2024-06-30 8672/week @ 2024-07-07 7212/week @ 2024-07-14 8175/week @ 2024-07-21 8973/week @ 2024-07-28

33,384次每月下载
用于105个crate(97个直接使用)

BSD-2-Clause

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);

Output


check!(scrappy == coco);

Output


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

Output


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

Output


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

Output

assertcheck

该软件包提供两个宏: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

如果未设置 colorno-color 选项,则 assert2 遵循 clicolors 规范

  • NO_COLOR != 0CLICOLOR == 0:写入不带颜色代码的纯文本输出。
  • CLICOLOR != 0:当输出是发送到终端时写入彩色输出。
  • CLICOLOR_FORCE != 0:即使不是发送到终端也写入彩色输出。

依赖关系

~1.3–8.5MB
~71K SLoC