はじめに

標準出力(p,puts,printなど)の結果が正しいかどうかをチェックする方法をメモします。
ただ、標準出力はpublicメソッドで行わないので、テストするパターンは普通はないはずです。
テストツールはTest::Unitでやりますが、Rspecでも同様です。

方法

stringioを使うと標準出力、標準入力もテストできます。
stringioはruby標準のため、テストに限らず使えます。

考え方として、スタブを用意して差し替え、結果を取得するということです。

実装コード例)

require "stringio"
require 'test/unit'

class TestSample < Test::Unit::TestCase
  sub_test_case "Sub!" do
    def test_sub
      out = StringIO.new
      out.puts "hoge"
      assert_equal("hoge",out.string.chomp)
    end
  end
end

stringioをrequireします。コードのとおり、StringIO.newのインスタンスでputsとすること部分をスタブとして結果をassertします。

参考:
http://docs.ruby-lang.org/ja/1.9.3/class/StringIO.html

その他おすすめの備忘録

 

Comments are closed.