2011-06-13 47 views
10

我的Ruby程序从stdin中读取行,并使用puts打印到stdout(终端)。我可以使用RSpec来测试读取和写入吗?我可以向我的程序注入一个字符串,就像它写在stdin中一样,并同时检查输出吗?我可以使用RSpec模拟stdin/stdout来测试控制台读写吗?

line = STDIN.read.chomp.split 

而且,我有读取和循环写,直到line[0]是“跳槽”。我可以在循环运行时测试,还是应该拨打subject.read_insubject.write_out

回答

16

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

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 mocking documentation

+1

实际上它是'STDOUT.should_receive(:print)'。 – yawn 2011-09-27 12:27:30

+0

@yawn谢谢,修复它。 – Jonathan 2011-09-27 20:02:42

+0

你甚至知道如何使用:print或:read ....这里存在“如何使用RSpec”文档?随处可见,我看到了我从未听说过的期望(我拥有RSpec书)我无法在这个主题上找到明确的文字。 – thefonso 2012-08-31 20:49:42

相关问题