2011-06-13 63 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

相關問題