6 个版本
使用旧的 Rust 2015
0.2.0-beta.3 | 2018 年 9 月 23 日 |
---|---|
0.2.0-beta.2 | 2018 年 9 月 20 日 |
0.1.2 | 2015 年 9 月 25 日 |
在 文件系统 中排名 720
61KB
998 行
io-providers
定义了不同类型 I/O 操作的 "provider" 特性和实现,使得依赖注入变得非常有助于测试。
支持多种不同的 I/O 类型
- 通过
Env
支持进程环境(变量、工作目录等) - 通过
StdStreams
支持标准流(stdin、stdout 和 stderr) - 通过
Fs
支持文件系统访问
除了每个特性的 "原生" 实现之外,还内置了 "模拟" 实现
SimulatedEnv
用于模拟进程环境状态SimulatedStdStreams
用于模拟标准流输入并检查输出TempFs
用于在类似于chroot
的沙箱中执行文件系统访问,从而与文件系统的其余部分隔离
每个提供者特质都可以独立使用,但还有一个包罗万象的 Io
特质,它提供了对所有这些特质的访问。如果您有多种 I/O 依赖项,创建和传递单个 &mut Io
可能是最简单的。
文档
示例
Cargo.toml
:
[dependencies]
io-providers = "0.2.0-beta.2"
src/main.rs
:
extern crate io_providers;
use std::io::Write;
use std::path::Path;
use io_providers::{Env, Io, NativeIo, SimulatedIo, StdStreams};
/// Gets the current working directory and prints it to stdout.
fn do_work<I: Io>(io: &mut I) {
let cur_dir = io.env().current_dir().unwrap();
let stdout = io.std_streams().output();
writeln!(stdout, "The current directory is: {}", cur_dir.to_str().unwrap()).unwrap();
}
fn main() {
// Test `do_work()` using a simulated I/O environment
let mut simulated_io = SimulatedIo::new().unwrap();
simulated_io.env_mut().set_current_dir(Path::new("/foo/bar")).unwrap();
do_work(&mut simulated_io);
assert_eq!(
"The current directory is: /foo/bar\n",
::std::str::from_utf8(simulated_io.std_streams().read_output()).unwrap());
// Now use a native I/O provided to access the real system
let mut real_io = NativeIo::new();
do_work(&mut real_io);
}
许可证
io-providers
根据 MIT 许可证 发布。
依赖项
~2–10MB
~108K SLoC