2011-06-13 16 views
10

Ruby programım stdin'dan satırları okur ve puts'u stdout (terminal) 'e yazdırmak için kullanır. Okumayı ve yazmayı test etmek için RSpec kullanabilir miyim? Programıma stdin ile yazılan ve aynı zamanda çıkışı kontrol eden bir dize enjekte edebilir miyim?RSpec'i, konsol okumalarını ve yazımlarını test etmek için stdin/stdout'u kullanmak için kullanabilir miyim?

line = STDIN.read.chomp.split 

Ayrıca, ben line[0] kadar "quit", okur ve bir döngü içinde yazıyor var. Döngü çalışıyorken test edebilir miyim veya subject.read_in ve subject.write_out mu arayayım?

cevap

16

yönteminde birden çok değer listeleyerek atasözleri kullanabilir ve birden çok kez çağrılan yöntemi kullanabilirsiniz. Bunlar verilen sırayla, her aramada bir, iade edilecektir.

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

STDIN.should_receive(:read).and_return("value1", "value2", "value3") 

Sen STDOUT ile benzer şeyler yapabilirsiniz:

STDOUT.should_receive(:puts).with("string") 

fazla bilgi için RSpec mocking documentation bakınız.

+1

'STDOUT.should_receive (: print)' aslında. – yawn

+0

@yawn Teşekkürler, düzeltin. – Jonathan

+0

nasıl kullanacağınızı bile biliyorsunuz: print or: read .... "RSpec'in nasıl kullanılacağı" dokümanında bu nerede var? döndüğüm her yerde, daha önce hiç duymadığım beklentileri görüyorum (RSpec kitabına sahibim). Bu konuda kesin bir metin bulamıyorum. – thefonso

İlgili konular