Я только что просмотрел Railscast для Minitest.
Каковы преимущества и недостатки использования RSpec vs Minitest для тестирования приложения rails? Какие функции я потеряю преобразование из RSpec в Minitest?
Я только что просмотрел Railscast для Minitest.
Каковы преимущества и недостатки использования RSpec vs Minitest для тестирования приложения rails? Какие функции я потеряю преобразование из RSpec в Minitest?
Я один из разработчиков 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Преимущества использования Minitest:
def test_blah
или it 'blah'
.В целом, это немного похоже на Sinatra vs. Rails, и я думаю, что Minitest и RSpec - оба прекрасных варианта в зависимости от ваших потребностей.
Последнее: если есть определенные аспекты Minitest, которые вам нравятся лучше, но другие вещи, которые вам больше нравятся в RSpec, их можно легко смешивать и сопоставлять. я написал сообщение в блоге об этом, если вам интересно.
Я преобразовал в spec-стиль Minitest из Test/Unit
с shoulda
, и он окупается. Это покончено с шаблоном, и они говорят, что это также улучшает скорость. Я никогда не использовал RSpec. Вместо этого я написал свое собственное примитивное тестирование и насмешливую структуру (просто для того, чтобы понимать насмешку, я отказался от нее при переключении на Minitest). Я думаю, что stubbing/mocking в RSpec может быть более продвинутым, поэтому, если вы уже узнали об этом, просто продолжайте его использовать. В противном случае, придерживайтесь Minitest, который позволит вам сотрудничать с людьми, незнакомыми с RSpec, такими как я.