2

私はルビーとテスト/ユニットに少し慣れていないので、これはばかげた質問のように思えるかもしれませんが、テンプレートテストケースにテストを動的に入力する方法を探しています(順序は重要です)。

基本的に私はこれに似たテストケースを持っています:

マスターテストケースファイル:

#testcase.rb

require 'test/unit/ui/console/testrunner'
require 'watir/testcase'
load "customTest1.rb"

class TC_Test_US < Watir::TestCase
    def test_a
        #do stuff
    end

    def test_b
        #do stuff
    end

    #dynamically load website specific modules here
    include myStuff
    # end of custom tests carry on with generic tests    

    def test_y
       #do stuff
    end

    def test_z
       #do stuff
    end
end

-カスタムテストケース

#customTest1.rb
module myStuff
    def test_customTest1
       #do stuff
    end

    def test_customTest2
       #do stuff
    end
end

これで、いくつかのcustomTestX.rbファイルができました。現在、すべてのファイルでtest_aをtest_zに複製していますが、ファイルを変更したり、新しいファイルを追加したりする必要がある場合は、これは最悪です。

マスターテストでテストを再利用し、カスタムテストを中央に動的に挿入できるようにしたい(test_bはテストの前に、test_yはテストの後にとどまることが重要です)。「loadcustomTestX.rb」を動的に変更し、各ファイルで同じ名前のモジュールを維持します。

このようにこのテストケースを起動すると、エラーは発生しませんが、カスタムテストは実際には実行されません。スクリプトはtest_bからtest_yにスキップし、customTest1とcustomTest2は実行されません。

答えはおそらく私のメインのtestcase.rbからインスタンス化することにありますが、私はまだこれを行うことに成功していません。マスターファイルをロードするとすぐに実行されます。testrunnerrequire行を削除すると、例外なくファイルをロードできません。これを行った場合、メソッドを中央に挿入する方法がわかりません。助言がありますか?

ありがとう!!!

4

1 に答える 1

3

カスタムテストは「test」という単語で始まっていないため、実行されていません。

「test」プレフィックスは、Test::Unitがどのメソッドがテストであるか通常のメソッドであるかを認識する方法です。Watir::TestCaseは同じだと思います。

試す:

#customTest1.rb
module myStuff
    def test_customTest1
       #do stuff
    end

    def test_customTest2
       #do stuff
    end
end

更新-TestSuiteを使用します:

ソリューションが機能しない理由はわかりませんが、機能しているように見えるソリューションの1つは、TestSuiteを使用することです。次に、開始テストケース、カスタムテストケース、そして終了テストケースを呼び出すことができます。

テストスイート:

#testsuite.rb
require 'test/unit/ui/console/testrunner'
require 'test/unit/testsuite'
require 'rubygems'
require 'watir/testcase'
require 'testcase_start'
require 'testcase_end'
require 'customTest1'

class TS_MyTests
    def self.suite
        suite = Test::Unit::TestSuite.new
        suite << TC_Test_US_Start.suite
        suite << MyStuff.suite
        suite << TC_Test_US_End.suite
        return suite
    end
end
Test::Unit::UI::Console::TestRunner.run(TS_MyTests)

開始テスト:

#testcase_start.rb
class TC_Test_US_Start < Watir::TestCase
    def test_a
        #do stuff
       puts 'a'
    end

    def test_b
        #do stuff
       puts 'b'
    end
end

終了テスト:

#testcase_end.rb
class TC_Test_US_End < Watir::TestCase
    def test_y
       #do stuff
      puts 'y'
    end

    def test_z
       #do stuff
      puts 'z'
    end

end

カスタムミドルテスト:

#customTest1.rb
class MyStuff < Watir::TestCase
    def test_customTest1
      puts '1'
    end

    def test_customTest2
      puts '2'
    end
end
于 2012-05-16T13:20:38.837 に答える