#assert #compare #testing #test-output

all_asserts

这是一个针对标准库中不存在的多种类型的断言的crate

8个稳定版本

2.3.1 2022年3月2日
2.3.0 2021年9月13日
2.2.0 2020年11月10日
2.1.0 2020年6月25日
0.1.4 2019年3月19日

#101 in 开发工具

Download history 12760/week @ 2024-03-14 9314/week @ 2024-03-21 11104/week @ 2024-03-28 7998/week @ 2024-04-04 14588/week @ 2024-04-11 10430/week @ 2024-04-18 14669/week @ 2024-04-25 11169/week @ 2024-05-02 18006/week @ 2024-05-09 15689/week @ 2024-05-16 9862/week @ 2024-05-23 17420/week @ 2024-05-30 16999/week @ 2024-06-06 12338/week @ 2024-06-13 12590/week @ 2024-06-20 7361/week @ 2024-06-27

54,069 每月下载量
13 crate 中使用

Apache-2.0

17KB
250

all_asserts 构建状态 all_asserts crate Crates.io license

这是一个针对标准库中不存在的多种类型的断言的crate

原理

在编写测试时,尤其是编写比较测试时,我遇到了几种问题。现有宏的输出在调试时提供了模糊不清的信息,这促使我编写了这个crate。我创建了一个RFC,但最终还是因为用例不足而被拒绝。虽然我不太确定别人,但我发现我经常在编写需要这些断言宏的多个测试。

导入和使用

将此添加到您的 Cargo.toml 文件中

all_asserts = "*"

现在您可以在任何地方使用断言!如果您想在整个crate中使用它,在您的 lib.rsmain.rs 中添加以下内容

#[macro_use]
extern crate all_asserts;

示例

使用 assert_range! 的示例

use all_asserts::assert_range;
fn main() {
  assert_range!(10..20, 20);
}

这会输出类似的内容

thread 'main' panicked at 'assertion failed:
`20 is not in range of 10..20` - it should have been in this range, src/main.rs:292:5

另一个示例

use all_asserts::{assert_range, assert_nrange};
fn main() {
  assert_range!(1.0..=2.0, 1.5);
  // You can also add a debug message if the assertion fails
  assert_nrange!(
    1.0..=2.0, 1.5, "Oops! 1.5 is in the interval [1.0,2.0]"
  );
}

这会输出

thread 'main' panicked at 'assertion failed: `1.5 is in range of 1.0..2.0` - it should not have been in this range: Oops! 1.5 is in the interval [1.0,2.0]', src/main.rs:295:5

使用 assert_lt! 的示例

thread 'main' panicked at 'assertion failed: `(left < right) but here (left >= right)`
  left: `100` ,
 right: `200` ', src/main.rs:79:5

这难道不是比当前宏提供的更好吗?好吧,让我听听您的看法!

可用的宏

断言宏的名称几乎已经告诉了您所有内容

  • assert_gt!(a, b) -> 如果a不大于b,则会引发panic
  • assert_ge!(a, b) -> 如果a不大于或等于b,则会引发panic
  • assert_lt!(a, b) -> 如果a不小于b,将引发panic
  • assert_le!(a, b) -> 如果a不大于或等于b,将引发panic
  • assert_range!((x..y), b) -> 如果b不在范围[x, y)内,将引发panic
  • assert_nrange!((x..y), b) -> 如果b在范围[x, y)内,将引发panic
  • assert_near!(a, b, e) -> 如果b不在a的±e范围内;即b在范围[a - e, a + e]内
  • assert_true!(a) -> 如果a不为真,将引发panic
  • assert_false!(a) -> 如果a不为假,将引发panic

debug_* 宏的变体也可用,它们仅在启用调试断言的构建上工作(通常是通过运行 cargo buildcargo test )产生的构建)。

构建

只需运行

$ git clone https://github.com/ohsayan/all_asserts.git
$ cd all_asserts
$ cargo build

进行测试

$ cargo test

贡献

欢迎您参与!

"没有人是一座孤岛!"

我始终坚信这一点!请帮助我更好地格式化输出,以便于调试。如果您发现任何问题,请创建一个问题!(所有疑问、问题和想法都受欢迎)

许可证

本项目根据Apache-2.0许可证授权。

无运行时依赖