我有一些使用Test :: Unit :: TestCase编写的单元测试,使用ci_reporter生成的XML。但是,由于我无法控制的情况,它们可能偶尔会波动,并且会随机失败。我想检测测试何时失败,并尝试重新运行它。
我尝试通过猴子修补'拆除'检查'通过'来执行此操作,并在失败时重新运行测试。但是,XML输出仍将显示第一个失败的情况,而不是第二个(现在正在通过)运行。
答案 0 :(得分: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
完成。
说明:
stdout
)存储在一个文件中,稍后再使用它来分析哪些测试失败并尝试重新测试。