7个版本 (4个破坏性更新)
0.5.1 | 2022年10月8日 |
---|---|
0.5.0 | 2021年11月7日 |
0.4.0 | 2020年4月15日 |
0.3.0 | 2019年7月15日 |
0.1.0 | 2017年9月27日 |
#67 in 测试
218,409 每月下载量
用于 298 个crates (36 直接)
42KB
603 行
fail-rs
文档.
Rust的失败点实现。
失败点是代码插装,允许在运行时动态地注入错误和其他行为,主要用于测试目的。失败点非常灵活,可以配置以展示各种行为,包括恐慌、早期返回和休眠。它们可以通过程序和环境的控制,并且可以条件性和概率性地触发。
此crate受FreeBSD的失败点的启发。
用法
首先,将以下内容添加到您的 Cargo.toml
[dependencies]
fail = "0.5"
现在,您可以从 fail
crate中导入 fail_point!
宏,并使用它注入动态失败。默认情况下,此宏生成的失败点生成是禁用的,可以通过 failpoints
Cargo功能在相关位置启用。
以下是一个简单程序示例,它使用失败点来模拟I/O恐慌
use fail::{fail_point, FailScenario};
fn do_fallible_work() {
fail_point!("read-dir");
let _dir: Vec<_> = std::fs::read_dir(".").unwrap().collect();
// ... do some work on the directory ...
}
fn main() {
let scenario = FailScenario::setup();
do_fallible_work();
scenario.teardown();
println!("done");
}
在这里,程序对 unwrap
调用 read_dir
的结果,这是一个返回 Result
的函数。换句话说,这个特定的程序期望这个 read_dir
调用始终成功。在实践中,它几乎总是如此,这使得在 read_dir
失败时测试程序的行为变得困难。通过使用失败点插装程序,我们可以假装 read_dir
失败,导致后续的 unwrap
潘克,并允许我们观察程序在失败条件下的行为。
当程序正常运行时,它只打印 "完成"
$ cargo run --features fail/failpoints
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/failpointtest`
done
但是,通过设置 FAILPOINTS
变量,我们可以看到如果 read_dir
失败会发生什么
FAILPOINTS=read-dir=panic cargo run --features fail/failpoints
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/failpointtest`
thread 'main' panicked at 'failpoint read-dir panic', /home/ubuntu/.cargo/registry/src/github.com-1ecc6299db9ec823/fail-0.2.0/src/lib.rs:286:25
note: Run with `RUST_BACKTRACE=1` for a backtrace.
有关更多信息,请参阅API文档。
待办事项
计划通过HTTP API触发失败点,但尚未实现。
依赖项
~315–445KB