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 ってどうんな風に使うのかな?
とりあえず、課題としておこう。