[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など複数のブラウザオブジェクトを生成し、そのそれぞれに対して同じテストを実施したいと考えています。