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

| 我的Ruby程序从
stdin
读取行,并使用
puts
打印到
stdout
(终端)。我可以使用RSpec来测试读写吗?我可以像在
stdin
中那样写一个字符串到我的程序中,同时检查输出吗?
line = STDIN.read.chomp.split
另外,我在循环中进行读取和写入,直到
line[0]
是\“ quit \”。我可以在循环运行时进行测试,还是应该叫
subject.read_in
subject.write_out
?     
已邀请:
        通过在
and_return()
方法中列出多个值,可以使用模拟并多次调用该方法。这些将以给定的顺序返回,每次调用一个。
STDIN.should_receive(:read).and_return(\"Your string\")

STDIN.should_receive(:read).and_return(\"value1\", \"value2\", \"value3\")
您可以使用STDOUT做类似的事情:
STDOUT.should_receive(:puts).with(\"string\")
有关更多信息,请参见RSpec模拟文档。     
        RSpec 3.0+ 在RSpec 3.0中,有用于此目的的输出匹配器:
expect { my_method }.to output(\"my message\").to_stdout
expect { my_method }.to output(\"my error\").to_stderr
    

要回复问题请先登录注册