Существует ли консенсус относительно тестовых платформ для Ruby 1.9.x?

Два партера с быстрым вступлением. Intro: Я прихожу к Ruby из Perl, и я немного потерян среди вариантов тестовых рамок. Я понимаю, что, вероятно, нет единого, универсального лучшего выбора, но я не могу даже получить четкое представление о игровом поле.

Итак, во-первых, MiniTest или Test:: Unit? Я только понял, что 1.9.1 по умолчанию стоит MiniTest. Я не заметил, так как все старые обучающие программы Test:: Unit все еще работают нормально. Если вы require test/unit, вы фактически получаете MiniTest в качестве эмулятора Test:: Unit (!). Моя первоначальная мысль состояла в том, чтобы пойти с выбором MiniTest по умолчанию (как только я это понял), но даже очень недавние книги, похоже, не заинтересованы в его обучении. Ruby Best Practices говорит: "Между ними существуют существенные различия", но он решил не заниматься с ними. Он также выполняет все свои тесты через Test:: Unit (плюс некоторые пользовательские дополнения). У нового Pickaxe также очень мало о MiniTest как таковом, и в главе по тестированию они также используют версию эмуляции Test:: Unit MiniTest. Чтобы прояснить мой первый вопрос, стоит ли: MiniTest - это бедный первый вариант? Должен ли я по умолчанию использовать эмулятор Test:: Unit?

Во-вторых, помимо встроенных параметров есть Rspec, Cucumber и компания для тестов, управляемых поведением. Является ли сообщество сильно склоняющимся к этому стилю и этим рамкам? Должен ли я начинать с Rspec?

Я сыграю немного со всеми тремя, но мне любопытно узнать, какой консенсус (если есть) формируется вокруг тестирования в Ruby 1.9.

(Быстрое наблюдение, как напоминание для меня и для всех, кто интересуется. См. эту ссылку для полезного обзора различных вызовов для теста:: Unit и MiniTest в разных рубинах от 1.8 до 1.9.1.)

Ответ 1

Есть ли консенсус? Я бы сказал, нет. Там сильный голос сообщества для использования TDD/BDD, но даже тогда он не универсален. Структура, вероятно, менее важна, чем применение практики в первую очередь.

Я считаю, что minitest - это замена 1.9 для Test:: Unit, которая существует только как обертка вокруг новой библиотеки для обратной совместимости. Я предполагаю, что использование маршрута с наименьшим количеством будет более перспективным.

RSpec - это несколько другое понятие: менее очевидно, внедренное "традиционными" структурами, основанными на xUnit. Стоит потратить некоторое время, чтобы посмотреть, предпочитаете ли вы это.

Там также Shoulda. хотя я не знаю, как это протестировано на 1.9: это больше обертки/расширения для Test:: Unit, поэтому, вероятно, это будет работать.

Конечно, забава здесь не прекращается: как только вы выбрали тестовую структуру, вам понадобится какой-то насмешливый движок. Или замену данных.

Во всех случаях я бы сказал, что любая инфраструктура, для которой вы можете найти доказательства регулярных обновлений, открытого, заполненного сообщества и API, который вы не ненавидите, будет выполнять эту работу. Это маловероятно, что вас позовут позже, если вы сделаете любой выбор.

Ответ 2

Я использую Rspec в течение года или около того. Я переключился с Test:: Unit специально, потому что я мог печатать по-человечески читаемому способу тестирования.

Он читается как проза. Это большой плюс для меня. Но как и все результаты будут меняться.

describe Model do
  it "should do what I want" do
    this.should == that
    it.should be_nil
    that.should_not be_true
  end
end 

Также, независимо от тестовой среды, вы также должны подумать о инструменте покрытия, например RCov. Он интегрируется с rspec и расскажет вам, где ваш код не испытывает тестирования.

Ответ 3

RSpec является консенсусом популярных книг Rails, таких как "The Rails Way". Плюсы IMHO - это тесты, которые читаются как английский, выходные форматы, которые читаются как английский, и на лету. Минусы медленны, и библиотека иногда кажется "волшебной", то есть слишком чуждой для кодеров, которые более знакомы с Ruby и модульными тестами. RSpec также предлагает Cucumber и Gherkin, которые являются способами написания историй пользователей, которые являются полезными приемом клиентов.

MiniTest встроен в Ruby 1.9. Плюсы IMHO - это быстрая скорость, очень удобная для чтения/записи для кодеров других языков и тесты, которые используют тот же стиль кода, который вы использовали бы в своем реальном коде. MiniTest имеет гораздо больше, чем большинство людей знают, например, MiniTest Spec имеет BDD-сокеты, похожие на RSpec, MiniTest Mock - издевательская система, а MiniTest Benchmark - для профилирования производительности.

В моем личном опыте люди, которые создают приложения Rails, стремятся к RSpec, а люди, которые строят чистый код Ruby, имеют тенденцию к MiniTest Unit, Spec, Mock, Benchmark и т.д.

Ответ 4

Я лично передаю rspec. Я обнаружил, что сосредоточение моих тестов на поведении действительно помогло мне обойти то, что я пытался сделать.

С помощью rspec перейдите и получите что-то вроде Factory Girl or Machinist для генерации ваших тестовых данных, не используйте светильники.

Что касается того, что сказал Майк, проект rspec достаточно активен, так как новые версии выпускаются нормально с каждой версией рельсов, чтобы помочь ему идти в ногу с разработкой структуры.

Ответ 5

RSpec хорош, но я думаю, что в последнее время было много разговоров и движений за Minitest, который поставляется с Ruby 1.9.x. У этого есть много тонкостей RSpec, но он намного более компактный и сжатый.