次のような単体テストをいくつか書いています。
def executing_a_signal
a_method(a_signal.new, a_model, a_helper);
assert_equal(new_state, a_model.state)
end
テストは正常に機能しますが、ロジックを実行するアサーションの直前に実行されるメソッドは、主に put 経由でさまざまなメッセージをコンソールに出力します。
コンソールへの出力を抑制する簡単な (おそらく組み込みの) 方法はありますか?私はモデルオブジェクトに対するメソッドの最終的な効果のみに興味があり、基本的にコンソールをきれいに保つために、それらを書き直したりコメントアウトしたりせずに、コンソールへのすべての出力を単純に防ぐ方法を見つけたいと思っていました。私のテストのためだけにステートメントを置きます。
それは間違いなく重大な問題ではありませんが、それに関する考えやアイデア (または回避策) をぜひ聞きたいと思っています。
テストで次のスニペットを使用して、STDOUT をキャプチャしてテストします。
def capture_stdout(&block)
original_stdout = $stdout
$stdout = fake = StringIO.new
begin
yield
ensure
$stdout = original_stdout
end
fake.string
end
この方法を使用すると、上記は次のようになります。
def executing_a_signal
capture_stdout { a_method(a_signal.new, a_model, a_helper) }
assert_equal(new_state, a_model.state)
end