2012-02-08 56 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),并用它供以后分析,测试失败并尝试重新测试它们。