2012-02-08 2 views
0

У меня есть некоторые модульные тесты, написанные с использованием Test :: Unit :: TestCase, с XML, сгенерированным ci_reporter. Однако из-за не зависящих от меня обстоятельств они могут иногда колебаться и случайным образом терпеть неудачу. Я хотел бы обнаружить, когда тест завершился неудачей, и попытаться повторно запустить его.Повторный запуск неудачных модульных тестов в рубине

Я пробовал сделать это путем обезглавливания «срыва», чтобы проверить «пройденный?» И повторить тесты при сбое. Однако выход XML по-прежнему будет показывать первый неудачный случай, а не второй (теперь проходящий) запуск.

+0

Смотрите также http://stackoverflow.com/questions/7435584/multiple-tests-with-minitest/7436257#7436257 – knut

+0

Спасибо за @knut ответа, но, увы, это что-то вне моего контроля, и не- mockable. Есть случайный фактор, и мне нужно жить с ним и найти способ обойти его. –

+0

Ooops, я связался с ответом. Я хотел связать вопрос http://stackoverflow.com/questions/7435584/multiple-tests-with-minitest/ - я отвечу. – knut

ответ

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 

Затем определите тестовый вызов в задаче грабли:

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 была задачей рейки)
  • Это работает только, если ваш XML изменяется для каждого прогона (оно должно быть регенерированный перед тестом, иначе вы всегда будете тестировать одинаково).
  • Вы можете сохранить результат теста (stdout) в файле и использовать его позже, чтобы проанализировать, какие тесты не удались и попытаться их повторить.