Crates.io | virtual-io |
lib.rs | virtual-io |
version | 0.1.0 |
source | src |
created_at | 2023-07-01 03:14:28.305212 |
updated_at | 2023-07-01 03:14:28.305212 |
description | Mock stdin/out/err for testing |
homepage | |
repository | |
max_upload_size | |
id | 905229 |
size | 18,102 |
Virtual IO is a rust library for easily implementing stdin and stdout in a testable way. It replaces all println!
and print!
macro calls.
use virtual_io::{VirtualIo, Vio};
fn get_name() -> String {
get_name_base(&mut virtual_io::new())
}
fn get_name_base(vio: &mut impl VirtualIo) -> String {
vio.print("What is your name? ");
let name = vio.read_line();
vio.println(format!("Hello, {}!", name));
name
}
#[cfg(test)]
mod test {
use super::*;
use virtual_io::VioFakeBuilder;
#[test]
fn test_get_name() {
// Create a fake version of vio that we can inject into the base
// function.
let mut vio = VioFakeBuilder::new()
// Add the expected io calls.
.expect_stdout("What is your name? ")
.provide_stdin("John")
.expect_stdout("Hello, John!\n")
// Build the fake vio.
.build();
// Assert that the return value is correct.
assert_eq!(get_name_base(&mut vio), "John");
// Assert that all io operations were identical to what was expected.
assert_eq!(vio.get_actual(), vio.get_expected());
}
}