#virtual #io #print #stdout #replace #println #vio

virtual-io

模拟 stdin/out/err 进行测试

1 个不稳定版本

0.1.0 2023年7月1日

#2440 in Rust 模式

每月48次下载

MIT 许可证

17KB
349

虚拟 I/O

虚拟 I/O 是一个 Rust 库,可轻松实现可测试的 stdin 和 stdout。它替换了所有 println!print! 宏调用。

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

无运行时依赖