rubyで単体テスト

 ruby on rails で本格的にアプリ作る前に、ruby単体テストってどんなもんかごにょごにょと書いてみた。

 テストされるコードは以下の適当なコード。

class Foo
  
  def foo
    "foo"
  end
  
  def bar(arg)
    raise ArgumentError
  end
  
  def hoge
    throw :hoge_error
  end
  
  def hogehoge(arg)
    arg
  end
  
  def foo?
    true
  end
  
  def one
    1
  end
  
  def two
    2
  end
  
  def >(obj)
    two > obj.one
  end
  
  def calc_delta(arg)
    arg / 10**6
  end
  
end

テストコードはこんな感じで書いてみた。

require "test/unit"
require "foo"

class TestFoo001 < Test::Unit::TestCase
  
  def setup
    # ごにょごにょと前処理
    @obj1 = Foo.new
    @obj2 = Foo.new
  end
  
  def teardown
    # ごにょごにょと後処理
  end
  
  # assert のサンプル
  def test_assert
    assert(@obj1.foo?, "失敗メッセージ")
  end
  
  # assert_equal のサンプル
  def test_assert_equal
    assert_equal(@obj1.one, @obj1.one, "失敗メッセージ")
  end
  
  # assert_not_equal のサンプル
  def test_assert_not_equal
    assert_not_equal(@obj1.one, @obj1.two, "失敗メッセージ")
  end
  
  # assert_instance_of のサンプル
  def test_assert_instance_of
    assert_instance_of(Foo, @obj1, "失敗メッセージ")
  end
  
  # assert_nil のサンプル
  def test_nil
    assert_nil(nil, "失敗メッセージ")
  end
  
  # assert_not_nil のサンプル
  def test_not_nil
    assert_not_nil(@obj1.nil?, "失敗メッセージ")
  end
  
  # assert_kind_of のサンプル
  def test_assert_kind_of
    assert_kind_of(Foo, @obj1, "失敗メッセージ")
  end
  
  # assert_respond_to のサンプル
  def test_assert_respond_to
    assert_respond_to(@obj1, :foo, "失敗メッセージ")
  end
  
  # assert_match のサンプル
  def test_assert_match
    assert_match(/foo/, @obj1.foo, "失敗メッセージ")
  end
  
  # assert_same のサンプル
  def test_assert_same
    assert_same(@obj1, @obj1)
  end
  
  # assert_not_same のサンプル
  def test_assert_not_same
    assert_not_same(@obj2, @obj1, "失敗メッセージ")
  end
  
  # assert_operator のサンプル
  def test_assert_operator
    assert_operator(@obj1, :>, @obj2, "失敗メッセージ")
  end
  
  # assert_raise のサンプル
  def test_assert_raise
    assert_raise(ArgumentError, "失敗メッセージ") { @obj1.bar }
  end
  
  # assert_nothing_raised のサンプル
  def test_assert_nothing_raise
    assert_nothing_raised(ArgumentError, "失敗メッセージ") { @obj1.foo }
  end
  
  # assert_throws のサンプル
  def test_assert_thorws
    assert_throws(:hoge_error, "失敗メッセージ") { @obj1.hoge }
  end
  
  # assert_nothing_thrown のサンプル
  def test_assert_nothing_thrown
    assert_nothing_thrown("失敗メッセージ") { @obj1.foo }
  end
  
  # assert_in_delta のサンプル
  def test_assert_in_delta
    assert_in_delta(0.05, @obj1.calc_delta(50000.0), 0.00001, "失敗メッセージ")
  end
  
  # assert_send のサンプル
  def test_assert_send
    assert_send([@obj1, :hogehoge, 4], "失敗メッセージ")
  end
  
  # assert_block のサンプル
  def test_assert_block
    assert_block("失敗メッセージ") { @obj1.foo? }
  end
  
end

MS な言語で NUnit単体テストコードを書いてた自分にとっては、
見慣れない assertion 機能があってちょっと困惑気味。
assert_send と assert_block ってどうんな風に使うのかな?
とりあえず、課題としておこう。