2012-05-15 19 views
2

我對Ruby和測試/單元有點新,所以這可能看起來像一個愚蠢的問題,但我正在尋找一種方法來動態地將測試輸入到模板測試用例中(順序很重要)。Ruby :: test/unit - 如何動態地將測試插入到測試用例的中間?

基本上我有一個測試用例類似於此:

主測試用例文件:

#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 

- 自定義的TestCase

#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在我的測試之後保留)。我會動態地改變「加載customTestX.rb」,並保持在每個文件中命名相同的模塊。

當我像這樣啓動這個測試用例時,我沒有收到任何錯誤,但是我的自定義測試實際上沒有執行。腳本從test_b跳到test_y,customTest1和customTest2不會被執行。

答案可能在於我的主要testcase.rb的實例,但我還沒有成功做到這一點呢。一旦你加載主文件,它會執行....如果我刪除了testrunner require行,我無法加載該文件沒有例外。如果我這樣做,我不知道如何在中間插入我的方法。有什麼建議麼?

謝謝!

+0

「順序是重要的」如果執行順序很重要,你有一個'測試代碼氣味',通常表示測試依賴於其他測試,而不是原子。這往往會在後來造成大量的維護噩夢,這可能是一個很好的原因,可以檢查你是如何做事的。編寫完善的功能測試應該能夠以任何順序,甚至是並行運行。 –

回答

3

您的自定義測試未運行,因爲它們不以「測試」一詞開頭。

「test」前綴是Test :: Unit如何知道哪些方法是測試與常規方法。我相信Watir :: TestCase是一樣的。

嘗試:

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

    def test_customTest2 
     #do stuff 
    end 
end 

UPDATE - 使用的TestSuite:

我不知道爲什麼你的解決方案不起作用,而是一個解決方案,看起來像作品是使用一個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 
+0

糟糕..在我的文件中,他們確實從test_開始。我只是沒有在我的例子中添加,這似乎並不是我的問題。謝謝你的發現。更新原始帖子。 – FINbit

+0

答案更新以包含使用TestSuite的解決方案。 –

+0

謝謝賈斯汀!使用TestSuites工作正常。 – FINbit

相關問題