Ответ 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, их можно легко смешивать и сопоставлять. я написал сообщение в блоге об этом, если вам интересно.