From: Kouhei Sutou Date: 2014-01-25T11:01:57+09:00 Subject: [ruby-list:49740] Re: test-unitで使用するテストケースを動的に生成したい 須藤です。 In <612264.71399.qm@web100217.mail.kks.yahoo.co.jp> "[ruby-list:49739] test-unitで使用するテストケースを動的に生成したい" on Fri, 24 Jan 2014 23:03:29 +0900 (JST), 古川大輔 wrote: >  似たようなパターンのテストを複数実施するために、define_methodでテストを生成して実行したいと考えているのですが、うまいこといかないのでアドバイスいただけないでしょうか? ... > #ちなみに最終的に何をしたいかというと、Selenium::WebDriverを使ってIEやFireFoxなど複数のブラウザオブジェクトを生成し、そのそれぞれに対して同じテストを実施したいと考えています。 そんな難しいことをしなくてもよいですよ。 test-unitは「いつも通りのRubyスクリプト」として書いていい感 じに動くことを大事にしているので、いつも通りに書けば実現でき ます。 Rubyでは実装を共有するためにモジュールを使いますよね。今回は 「同じテストを実施したい」ということなので、「テストの中身」 を共有すればよいですね。ということで、モジュールを作ります。 -- require "test-unit" module SearchTests def test_search1 STDERR.puts "[test]%s with %s"%['search1',browser.to_s] end end -- ↑ではbrowserを使っていますが、このモジュールでは定義していま せん。今回はこのbrowser毎にテストを実施したいということなので、 browser毎にテストケースを作り、それに↑で作ったモジュールを includeします。 -- class Browser1Test < Test::Unit::TestCase include SearchTests def browser "browser1" end end class Browser2Test < Test::Unit::TestCase include SearchTests def browser "browser2" end end -- いつも通りのRubyスクリプトですよね。 難しく考えなくてよいですよ。 実際に実行してみるとbrowser毎に同じ内容のテストを実施してい ます。 -- % ruby /tmp/b.rb Loaded suite /tmp/b Started [test]search1 with browser1 .[test]search1 with browser2 . Finished in 0.00116859 seconds. 2 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 100% passed 1711.46 tests/s, 0.00 assertions/s -- > ということで、テストは生成されているのですけど、実行してもらえないようです。 > どこかもうちょっと早いタイミングで生成する必要があるのかと思うのですけど、initializeでもダメだったので、どうしたものかと考えています。 参考までに。。。 test-unitは、最初に、登録されているテストを列挙して、実際に実 行するテストをフィルター(-nオプションなどで実行するテストを 絞り込めます)して、それからstartupやテストケースオブジェクト を作っているので、古川さんが試したタイミングではすでに間に合 わないのです。