Могу ли я использовать RSpec для издевательства stdin/stdout для проверки чтения и записи консоли?
Моя программа Ruby считывает строки из stdin
и использует puts
для печати на stdout
(терминал). Могу ли я использовать RSpec для проверки чтения и записи? Могу ли я вставить строку в свою программу, как это было написано в stdin
, и в то же время проверить вывод?
line = STDIN.read.chomp.split
Кроме того, у меня есть записи и записи в цикле, пока line[0]
не будет "quit". Могу ли я тестировать, пока цикл работает, или я должен называть subject.read_in
и subject.write_out
?
Ответы
Ответ 1
Вы можете использовать mocks и вызывать метод, который вызывается более одного раза, путем перечисления нескольких значений в методе 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 mocking documentation.