rspec3で標準入力と標準出力のテスト
rspecで標準入力からユーザの入力を受け取って標準出力に出力する方法の覚書 rspec2とrspec3がまざっててややこしかった
プロダクションコード
solver.rb
get
でユーザの入力を受け取ってprint
で標準出力に答え(文字列)を出力するのクラス
class Solver attr_reader :n def get @n = gets end def print puts 'answer is foo' end end
テストコード
solver_spec.rb
標準入力ではallow(ARGF).to receive(:gets) { 1000 }
とするといいらしい.
1000
の部分を入力したい値に変更すればいい.
標準出力はoutput("answer is foo\n").to_stdout
とするといいらしい.
"answer is foo\n"
の部分を出力したい値に変更すればいい.
require 'solver' describe Solver do let(:solver) { described_class.new } describe 'solver#getは標準入力を受け取って@nにセットする' do before do allow(ARGF).to receive(:gets) { 1000 } solver.get end it { expect(solver.n).to eq 1000 } end describe 'solver#printは標準出力に答えを出力する' do it { expect { solver.print }.to output("answer is foo\n").to_stdout } end end