如何解决我可以使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。