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 测试

Download history 91076/week @ 2024-03-14 80003/week @ 2024-03-21 78009/week @ 2024-03-28 78381/week @ 2024-04-04 77343/week @ 2024-04-11 83207/week @ 2024-04-18 69754/week @ 2024-04-25 62262/week @ 2024-05-02 70295/week @ 2024-05-09 71813/week @ 2024-05-16 53595/week @ 2024-05-23 56121/week @ 2024-05-30 50248/week @ 2024-06-06 53780/week @ 2024-06-13 58636/week @ 2024-06-20 44744/week @ 2024-06-27

218,409 每月下载量
用于 298 个crates (36 直接)

Apache-2.0

42KB
603

fail-rs

CI Crates.io

文档.

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