Перезапустить проваленные юнит-тесты в ruby - PullRequest
0 голосов
/ 08 февраля 2012

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

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

1 Ответ

0 голосов
/ 10 февраля 2012

Это немного похоже на Несколько тестов с минимальным тестом

Возможно, это возможно: скопируйте ваш тестовый пример в собственный файл. В качестве примера попробуйте следующий тест:

#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 не будет завершен.

Примечания:

  • Рейк не нужен, вы можете сделать звонок без рейка ( Мой шаблон был задачей рейка)
  • Это работает только в том случае, если ваш xml изменяется для каждого прогона (он должен быть регенерирован перед тестом. В противном случае вы тестируете всегда одинаково).
  • Вы можете сохранить результат теста (stdout) в файле и использовать его позже для анализа, какие тесты не пройдены, и попытаться повторно их протестировать.
...