[ruby-list:49739] test-unitで使用するテストケースを動的に生成したい

From: 古川大輔 <mogya99@...>
Date: 2014-01-24 14:03:29 UTC
List: ruby-list #49739
 こんにちは。
 似たようなパターンのテストを複数実施するために、define_methodでテストを生成して実行したいと考えているのですが、うまいこといかないのでアドバイスいただけないでしょうか?

require "test-unit"
class Search1 < Test::Unit::TestCase
  class << self
    def startup
      # _test_で始まるメソッドを元に各ブラウザに対するテストを生成する
      STDERR.puts "[called]startup"
      instance_methods.grep(/^_test_/).each{|method_name|
        ['browser1','browser2'].each{|browser|
          test_name = "%s_with_%s"%[method_name.to_s.sub('_',''),browser.to_s]
          STDERR.puts "[define]%s"%test_name
          define_method(test_name) {
            send(method_name,browser)
          }
        }
      }
    end
  end
  def _test_search1(browser)
    STDERR.puts "[test]%s with %s"%['search1',browser.to_s]
  end
  def test_default
    STDERR.puts "tests:%s"%self.methods.grep(/^test/).to_s
  end
end
generate_test内で_test_で始まるメソッドを列挙して、テストを動的生成しようとしています。


実際やってみると
$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux]
$ ruby pc/search.rb
Loaded suite pc/search
Started
[called]startup
[define]test_search1_with_browser1
[define]test_search1_with_browser2
tests:[:test_default, :test_search1_with_browser1, :test_search1_with_browser2]
.
Finished in 0.003118883 seconds.
1 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
320.63 tests/s, 0.00 assertions/s

ということで、テストは生成されているのですけど、実行してもらえないようです。
どこかもうちょっと早いタイミングで生成する必要があるのかと思うのですけど、initializeでもダメだったので、どうしたものかと考えています。

#ちなみに最終的に何をしたいかというと、Selenium::WebDriverを使ってIEやFireFoxなど複数のブラウザオブジェクトを生成し、そのそれぞれに対して同じテストを実施したいと考えています。

In This Thread

Prev Next