Ruby — выполнение тестов в случайном порядке с помощью rake

Как сделать так, чтобы тесты для моего приложения Rails выполнялись в случайном порядке? Есть ли простое решение с использованием грабли?


person Pietro Di Bello    schedule 03.09.2009    source источник
comment
Почему вы хотите это сделать?   -  person Sam Saffron    schedule 04.09.2009
comment
Чтобы между тестами не было зависимостей?   -  person Andrew Grimm    schedule 04.09.2009
comment
Да, главное для нас — сделать так, чтобы между тестами не было зависимостей.   -  person Pietro Di Bello    schedule 04.09.2009
comment
См. также Почему Test::Unit.test_order= не работает как ожидается?   -  person knut    schedule 13.12.2012


Ответы (2)


Ну вот, определите это в lib/tasks/tasks.rb

namespace :test do 
  namespace :randomize do 
    desc "Randomize tests"
    Rake::TestTask.new(:all => "db:test:prepare") do |t|
      t.libs << "test"
      t.test_files = Rake::FileList[
        'test/unit/**/*_test.rb',
        'test/functional/**/*_test.rb', 
        'test/integration/**/*_test.rb' 
      ].shuffle
      t.verbose = true
    end
  end
end

Выполнить: rake test:randomize:all

Имейте в виду, что внутрифайловые тесты по-прежнему будут выполняться в том порядке, в котором они появляются. Я думаю, вы могли бы использовать модуль тестирования патчей для обезьян, чтобы учесть это.

person Sam Saffron    schedule 04.09.2009
comment
Спасибо, Сэм. Это не работает для меня, и на самом деле решение, которое вы опубликовали, такое же, к которому я пришел: просто перетасуйте массив, содержащий список тестовых файлов для выполнения. На самом деле, порядок тестовых файлов, которые вы передаете в грабли TestTask, похоже, игнорируется, а это означает, что внутренне грабли будут сортировать этот список в алфавитном порядке по имени файла. Я проверяю это поведение, выполняя задачу rake с параметром TESTOPTS=-v, чтобы контролировать фактический порядок выполнения теста. Вот версии, которые я использую: Ruby: 1.8.6 - 114 RubyGems: 1.3.5 Rake: 0.8.7 Rails: 2.3.3 У вас есть еще идеи? Ткс! - person Pietro Di Bello; 04.09.2009

Вы можете проверить «ZenTest 3.9.0: теперь с большим количеством зла» (не могу сделать прямую ссылку, используйте кеш Google)

Added ability to set test execution order, defaults to :random. EVIL!
person Andrew Grimm    schedule 04.09.2009
comment
Я некоторое время играл с ZenTest, но никогда не догадывался, как включить случайный порядок. Я имею в виду, что порядок выполнения по умолчанию фиксирован и остается одинаковым для разных тестов. - person Pietro Di Bello; 04.09.2009