9个稳定版本
1.0.10 | 2023年8月5日 |
---|---|
1.0.9 | 2023年6月19日 |
1.0.7 | 2022年8月13日 |
1.0.4 | 2022年7月3日 |
0.1.0 | 2022年5月16日 |
110 在 并发 中排名
每月401次下载
用于 10 个Crates(直接使用4个)
10KB
83 行
fault-injection
类似于 try!
宏或 ?
操作符,但在测试期间可以外部控制注入故障。与 try!
宏或 ?
操作符不同,它还注释了错误描述,包括错误所在的crate、文件名和行号,以便快速调试。它专门用于与 io::Result
类型一起工作,并在发生故障时返回一个 io::Error
,类似于 try!
宏或 ?
操作符。通过将 FAULT_INJECT_COUNTER
减 1
(默认设置为 u64::MAX
),如果它达到0,则返回一个具有 Other
类型的 io::Error
。如果将 SLEEPINESS
设置为非0值,此宏还将注入弱伪随机延迟,以方便基本形式的并发测试。
示例
use std::io;
use fault_injection::{fallible, set_trigger_function, FAULT_INJECT_COUNTER};
fn trigger_fn(crate_name: &str, file_name: &str, line_number: u32) {
println!(
"fault injected at {} {} {}",
crate_name, file_name, line_number
);
}
fn do_io() -> io::Result<()> {
Ok(())
}
// this will return an injected error
fn use_it() -> std::io::Result<()> {
set_trigger_function(trigger_fn);
FAULT_INJECT_COUNTER.store(1, std::sync::atomic::Ordering::Release);
fallible!(do_io());
Ok(())
}