virtual-io

Crates.iovirtual-io
lib.rsvirtual-io
version0.1.0
sourcesrc
created_at2023-07-01 03:14:28.305212
updated_at2023-07-01 03:14:28.305212
descriptionMock stdin/out/err for testing
homepage
repository
max_upload_size
id905229
size18,102
Nick Mazuk (Nick-Mazuk)

documentation

README

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());
    }
}
Commit count: 0

cargo fmt