virtual-io 0.1.0

Mock stdin/out/err for testing
Documentation
  • Coverage
  • 77.78%
    7 out of 9 items documented1 out of 1 items with examples
  • Size
  • Source code size: 17.79 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 763.80 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Links
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • Nick-Mazuk

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.

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());
    }
}