我可以使用RSpec来模拟stdin/stdout来测试控制台的读写吗?

pvi*_*nis 10 ruby stdin rspec stdout

我的Ruby程序从(终端)读取行stdin和用于puts打印的行stdout.我可以使用RSpec来测试读写吗?我可以将一个字符串注入我的程序,就像写入stdin并同时检查输出一样吗?

line = STDIN.read.chomp.split
Run Code Online (Sandbox Code Playgroud)

此外,我在循环中读取和写入,直到line[0]"退出".我可以测试回路运行时,或者我应该叫subject.read_insubject.write_out

Jon*_*han 16

您可以使用模拟并通过在方法中列出多个值来多次调用该and_return()方法.这些将按照给定的顺序返回,每次通话一次.

STDIN.should_receive(:read).and_return("Your string")

STDIN.should_receive(:read).and_return("value1", "value2", "value3")
Run Code Online (Sandbox Code Playgroud)

你可以用STDOUT做类似的事情:

STDOUT.should_receive(:puts).with("string")
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅RSpec模拟文档.