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 开发工具
54,069 每月下载量
在 13 crate 中使用
17KB
250 行
all_asserts
这是一个针对标准库中不存在的多种类型的断言的crate
原理
在编写测试时,尤其是编写比较测试时,我遇到了几种问题。现有宏的输出在调试时提供了模糊不清的信息,这促使我编写了这个crate。我创建了一个RFC,但最终还是因为用例不足而被拒绝。虽然我不太确定别人,但我发现我经常在编写需要这些断言宏的多个测试。
导入和使用
将此添加到您的 Cargo.toml
文件中
all_asserts = "*"
现在您可以在任何地方使用断言!如果您想在整个crate中使用它,在您的 lib.rs
或 main.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,则会引发panicassert_ge!(a, b)
-> 如果a不大于或等于b,则会引发panicassert_lt!(a, b)
-> 如果a不小于b,将引发panicassert_le!(a, b)
-> 如果a不大于或等于b,将引发panicassert_range!((x..y), b)
-> 如果b不在范围[x, y)内,将引发panicassert_nrange!((x..y), b)
-> 如果b在范围[x, y)内,将引发panicassert_near!(a, b, e)
-> 如果b不在a的±e范围内;即b在范围[a - e, a + e]内assert_true!(a)
-> 如果a不为真,将引发panicassert_false!(a)
-> 如果a不为假,将引发panic
debug_*
宏的变体也可用,它们仅在启用调试断言的构建上工作(通常是通过运行 cargo build
或 cargo test
)产生的构建)。
构建
只需运行
$ git clone https://github.com/ohsayan/all_asserts.git
$ cd all_asserts
$ cargo build
进行测试
$ cargo test
贡献
欢迎您参与!
"没有人是一座孤岛!"
我始终坚信这一点!请帮助我更好地格式化输出,以便于调试。如果您发现任何问题,请创建一个问题!(所有疑问、问题和想法都受欢迎)
许可证
本项目根据Apache-2.0许可证授权。