Подтвердить что ты не робот

Minitest и Rspec

Я только что просмотрел Railscast для Minitest.

Каковы преимущества и недостатки использования RSpec vs Minitest для тестирования приложения rails? Какие функции я потеряю преобразование из RSpec в Minitest?

4b9b3361

Ответ 1

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

В целом, мощность RSpec исходит из того факта, что она переопределяет так много концепций тестирования в объекты первого класса. Где Test:: Unit и Minitest используют простые методы для создания утверждений, RSpec использует первоклассные объекты-сопоставления, которые поддерживают отрицание, самоописание и многое другое. Примеры RSpec - это объекты первого класса, которые поддерживают богатые метаданные; minitest/spec компилирует it блокирует простые методы, которые не поддерживают одинаковые богатые метаданные. RSpec поддерживает указание общего поведения с использованием первоклассной конструкции (разделяемых групп примеров), которая принимает аргументы; w/minitest вы можете использовать наследование или mixin для повторного использования тестов, но у него нет такой же первоклассной поддержки. RSpec имеет явный API форматирования (и есть много сторонних разработчиков, которые его используют); Я не знаю, как minitest обладает таким же первоклассным API форматера.

Как кто-то, кто постоянно проводит тесты и практикует TDD весь день, я нахожу, что сила RSpec дает мне очень полезную информацию. Многие люди считают, что это слишком много, и есть дополнительные когнитивные затраты на дополнительные абстракции.

Вот некоторые особенности RSpec, которые, как мне кажется, не хватает minitest:

  • before(:all) (обратите внимание, что это мощная пользовательская функция RSpec, которая редко используется, я использовал ее несколько раз за много лет использования RSpec)
  • around(:each) hooks
  • Общие группы примеров
  • Общие контексты
  • Богатая поддержка метаданных, которая может использоваться для управления запуском этих примеров, в которые включаются групповые контексты групп, в которые включены модули групп примеров и т.д.
  • Интегрированная поддержка широкого спектра издевательских функций w/rspec-mocks; Minitest:: Mock намного проще и более ограничен в сравнении.
  • RSpec имеет rspec-fire, что является удивительным.

Преимущества использования Minitest:

  • Он встроен в стандартную библиотеку, поэтому вам не нужно ничего устанавливать.
  • Его можно использовать в стилях def test_blah или it 'blah'.
  • База кода очень мала и проста. RSpec, в силу этого более старшего возраста и дополнительных возможностей, больше в сравнении.
  • Minitest загружается быстрее RSpec (это около 4 файлов кода по сравнению с RSpec, имеющим много файлов, распространяемых по 3-мя драгоценными камнями), но обратите внимание, что RSpec отнюдь не медленный; в большинстве моих проектов в эти дни я получаю тестовую обратную связь от RSpec в течение секунды (и часто менее чем за 500 мс).

В целом, это немного похоже на Sinatra vs. Rails, и я думаю, что Minitest и RSpec - оба прекрасных варианта в зависимости от ваших потребностей.

Последнее: если есть определенные аспекты Minitest, которые вам нравятся лучше, но другие вещи, которые вам больше нравятся в RSpec, их можно легко смешивать и сопоставлять. я написал сообщение в блоге об этом, если вам интересно.

Ответ 2

Я преобразовал в spec-стиль Minitest из Test/Unit с shoulda, и он окупается. Это покончено с шаблоном, и они говорят, что это также улучшает скорость. Я никогда не использовал RSpec. Вместо этого я написал свое собственное примитивное тестирование и насмешливую структуру (просто для того, чтобы понимать насмешку, я отказался от нее при переключении на Minitest). Я думаю, что stubbing/mocking в RSpec может быть более продвинутым, поэтому, если вы уже узнали об этом, просто продолжайте его использовать. В противном случае, придерживайтесь Minitest, который позволит вам сотрудничать с людьми, незнакомыми с RSpec, такими как я.