Test::Unitとdefine_methodのコンボ
Rubyのテストを書く際、RSpecとTest::Unitを行ったり来たりしているのだけど、最近はTest::Unitのターン。
で、jijixi's diary - 実は Rails で Test::Unit を使ってテストを書いているのは少数派なのではないか、という想像 , Mac OSX 10.5.2でFirewireのスピ.. でみたネタを使ってみたら、何だかとても使いやすかったので、利用させていただいています。
ただ毎回、define_methodと書くのがめんどいので、こんな感じで使っています。
require 'test/unit' class ArrayTest < Test::Unit::TestCase def self.expect(str_test, &blk) define_method("test_#{str_test}", &blk) end expect '一つ以上の要素が格納されている場合、#sizeは格納されている要素数を返すこと' do array = [11, 22, 33] assert_equal(3, array.size) end expect '要素が格納されていない場合、#sizeはnilを返すこと(うそてすと)' do array = [] assert_equal(nil, array.size) end end
実行させるとこう
Loaded suite array_test Started .F Finished in 0.051861 seconds. 1) Failure: test_要素が格納されていない場合、#sizeはnilを返すこと(うそてすと)(ArrayTest) [array_test.rb:15]: <nil> expected but was <0>. 2 tests, 2 assertions, 1 failures, 0 errors
define_method!! define_method!!