# Virtual IO Virtual IO is a rust library for easily implementing stdin and stdout in a testable way. It replaces all `println!` and `print!` macro calls. ```rs 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()); } } ```