From: rubikitch Date: 2000-04-12T18:30:46+09:00 Subject: [ruby-list:21870] rubyunit るびきちです。 rubyunit に興味があるので使ってみました。 テストそのものをオブジェクトとする考え方には目からウロコです。 --- testsuite.rb.org Wed Apr 12 18:04:31 2000 +++ testsuite.rb Wed Apr 12 18:04:39 2000 @@ -22,7 +22,7 @@ def initialize(k=nil) @test_s = [] if k != nil - k.instance_methods.sort.each do |m| + k.instance_methods(true).sort.each do |m| if /^test/ =~ m @test_s.push(k.new(m, k.name)) end ↑のパッチを当てた後、 試しに rubyunit を使って正規表現のテストをするプログラムをちょっと書いてみました。 やりたいことは、Test1 でも Test2 でも RegexpTest.testregexp が同じにして、 文字列 @s と正規表現 @r だけを変えてテストすることです。 こんな書き方は邪道なのでしょうか? このように testXXXX メソッドが同じでパラメータだけを変えるのに もっと良い書き方はないでしょうか? #!/usr/bin/ruby require 'runit/testcase' class RegexpTest < RUNIT::TestCase def testregexp assert(!(@s =~ @r).nil?) end end class Test1 < RegexpTest def setup; @s, @r = ['string', /ring/] end end class Test2 < RegexpTest def setup; @s, @r = ['string', /strong/] end end class All def self::suite suite = RUNIT::TestSuite.new suite.add_test(Test1.suite) suite.add_test(Test2.suite) suite end end require 'runit/cui/testrunner' RUNIT::CUI::TestRunner.run(All.suite) 実行結果はこんな感じです。 Test1#testregexp . Test2#testregexp F. Time: 0.024504 FAILURES!!! Test Results: Run: 2/2 Failures: 1 Errors: 0 Failures: 1 /tmp/test2.rb:6:in `testregexp': (RUNIT::AssertionFailedError) from /tmp/test2.rb:28 Interpretation finished at Wed Apr 12 18:17:03 るびきち☆ http://i.am/rubikitch