#assertions #assert #check #match #assert2

assert2ify

assert2 crate中表达性断言的简单一行解决方案,用于替换测试中的断言

1 个不稳定版本

0.1.0-alpha12021年5月18日

725 in 测试

BSD-2-Clause

17KB
82

assert2ify

build lints tests

这个crates提供了#[assert2ify]属性,这是一个一行解决方案,用于将你的代码中的标准库断言替换为assert2 crate中的更具有表现力的断言。

这个属性不仅可以替换简单的断言,如assert!(...)assert_eq!(...),还可以替换更复杂的结构,如assert!(matches!(...)),并带有更好的错误消息。

动机

Rust的内建测试和断言支持非常出色,但标准库断言在错误消息方面有所欠缺。这正是assert2 crate大显身手的地方,因为它提供了非常有帮助的错误消息。

假设我们对一个向量的长度有一些断言,例如assert!(my_vector.len() < 5)。如果这个断言失败,它只会告诉你条件被违反了,但不会告诉你向量的实际长度是多少。为了知道这一点,你必须调试测试或添加额外的日志输出。assert2 crate就来救场,因为我们把断言写成assert2::assert!(my_vector.len() < 5),那么可能的失败情况将如下所示(加上一些漂亮的颜色)

Assertion failed at tests/my_test.rs:107:5:
  assert!( my_vector.len() < 5 )
with expansion:
  7 < 5

您可以使用#[assert2ify]属性注释任何函数(通常是测试用例),它将自动替换函数内的断言。

用法

只需将#[assert2ify]属性注释到任何函数上,然后让该属性替换您的代码中的断言为assert2 crate的断言。在文档中查看#[assert2ify]属性还能为您做什么。它不仅替换简单的断言,还能替换更复杂的结构,例如assert!(matches!(...)),以更易于理解的形式。断言的工作方式与之前相同,但它们提供了更好的错误信息。

此外,该属性允许您用检查替换断言,检查不会立即失败,而是在测试用例完全结束后才会失败。如果您想在一次通过中捕获测试中所有失败的断言,可以使用属性#[assert2ify(check)]来完成。

限制

请参阅文档以了解将替换的内容和不会替换的内容的限制。

依赖项

~1.4–8.5MB
~77K SLoC