2012-02-08 58 views
0

我使用Test :: Unit :: TestCase編寫了一些單元測試,其中ci_reporter生成了XML。但是,由於無法控制的情況,它們可能偶爾會波動,並隨機失敗。我想檢測測試何時失敗,並嘗試重新運行它。在ruby中重新運行失敗的單元測試

我試圖用猴子補丁「拆解」這樣做是爲了檢查「過去了?」,並重新運行在一個失敗的試驗。但是,XML輸出仍將顯示第一個失敗的案例,而不是第二個(即將通過)的運行。

+0

參見http://stackoverflow.com/questions/7435584/multiple-tests-with-minitest/7436257#7436257 – knut 2012-02-08 21:17:32

+0

感謝您的答覆@knut,但很可惜這是一件超出了我的控制和未經mockable。有一個隨機因素,我必須忍受它,並找到解決方法。 – 2012-02-09 11:38:26

+0

哎呀,我鏈接到一個答案。我想鏈接的問題http://stackoverflow.com/questions/7435584/multiple-tests-with-minitest/ - 我會做出答案。 – knut 2012-02-09 20:23:10

回答

0

這聽起來有點像Multiple tests with minitest

相反也許這是一種可能性:在自己的文件,你的測試用例複製。作爲一個例子,請嘗試以下測試:

#store it as file 'testcase.rb' 
gem 'test-unit' 
require 'test/unit' 

class X < Test::Unit::TestCase 
    def test_1 
    num = rand(10) 
    assert_true(num < 2, "Value is #{num}") 
    end 
end 

然後在rake任務定義您的測試呼叫:

require 'rake' 

TEST_REPETION = 10 
task :test do 
    success = false 
    TEST_REPETION.times{ 
    stdout = `ruby testcase.rb` 

    if stdout =~ /Failure/ 
     puts "Failure occured - redo the test" 
    else 
     puts 'Tests ok' 
     success = true 
     exit 
    end 
    } 

    puts "Stopped after #{TEST_REPETION} tries" unless success 
end 

現在測試稱,直到試驗成功或TEST_REPETION完成。

備註:不需要

  • 耙,你可以這樣做,而不耙通話(My template是一個rake任務)
  • 這僅適用,如果每次運行你的XML的變化(它必須是在測試之前再生,否則你總是測試一樣)。
  • 您可以存儲在一個文件中的測試結果(stdout),並用它供以後分析,測試失敗並嘗試重新測試它們。