Плюсы и минусы использования заводов в наборе тестов Rails?

StackOverflow https://stackoverflow.com/questions/768183

Вопрос

В настоящее время я смотрю на тестовый набор Tefty Rails. Я ничего не могу понять, но время выполнения всего набора (единица/функциональная/некоторая интеграция) может работать свыше 5 минут.

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

Наши следующие несколько спринтов будут полностью сосредоточены на тестовом наборе, как на улучшении охвата, написании лучших тестов и, что наиболее важно, на написании более эффективных тестов.

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

Может ли кто -нибудь рассказать мне о том, почему или почему я не должен использовать фабрики?

Спасибо!

Это было полезно?

Решение

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

Светильники:

  • трудно поддерживать отношения (особенно ко многим);
  • Среда выполнения тестового набора обычно медленнее из -за большего количества ударов дБ;
  • Тесты очень чувствительны к изменениям в схеме.

Заводы:

  • Вы загрязнете все, что не тестируете на текущем модульном тесте;
  • Вы готовите сущности, которые вы тестируете с заводами. Именно здесь фабрики показывают свое реальное преимущество-легко установить новые тестовые примеры, так как вам не нужно поддерживать тонну ямл-ошибок для этого;
  • Вы концентрируетесь на тестировании. Если тесты требуют изменения сценария, вы не меняете свое мышление. Пока заглушки разумные, а заводы легко настроены, все в порядке.

Итак, фабрики кажутся хорошим способом. Единственные возможные недостатки, которые я вижу, это:

  • время, когда вы потратили мигрируя с светильников;
  • Сохранение именного набора сценариев может потребовать некоторых усилий.

Другие советы

Ответ Олега великолепен, но позвольте мне предложить перспективу кого -то, кто использует оба.

Установки какое -то время были вроде сообщества Whipping of the Rails. Все понимают недостатки светильников, но никто на самом деле не отстаивает их сильные стороны. По моему опыту, фабрики сами по себе могут легко стать такими же трудными в поддержании, как и приспособления (это действительно зависит от схемы, но я отступаю). Реальная сила фабрики заключается в селективной замене боли на основе приспособления. Поговорим о паре конкретных спецификаций.

Первая проблема - производительность. Если вы можете протестировать большую часть своего приложения, не попав в базу данных, вы увидите значительную скорость, но для большинства приложений я не думаю, что разумно тестировать, не попав в базу данных. В какой -то момент вы хотите проверить весь стек. Каждый раз, когда вы издевались над или заглушаете, вы делаете предположение о интерфейсе, который может содержать тонкие ошибки. Таким образом, предполагая, что вам необходимо попасть в базу данных по некоторому значительному проценту тестов, транзакционных приспособлениях (вы находятся Использование транзакционных приборов верно?) Вполне может быть намного быстрее, чем создание целой среды для каждого теста.

Я бы сказал, с размером вашего тестового набора, на который вам действительно нужно посмотреть Непрерывная интеграция чтобы масштабировать вашу разработку на следующий уровень. Независимо от того, сколько вы их ускоряете, разработчики все еще долго ждать. Может, посмотрите на авто-тест также, чтобы помочь на индивидуальном уровне. Но в конечном итоге CI позволит вам поддерживать дисциплину тестирования, не жертвуя ловкостью разработчика.

Место, где на самом деле сияют светильники, находится в функциональном/интеграционном тестировании. Я смотрю на это, так это то, что приспособления должны создать здоровое базовое состояние для тестирования приложения. Большинство модульных тестов на самом деле не нужны. Вы можете получить очень хорошее покрытие устройства с помощью заводов. Однако, когда дело доходит до функционального тестирования, любая данная страница может попасть в десятки моделей. Я не хочу настраивать все эти вещи в каждом тесте. Поскольку я строю еще более сложные сценарии, я становлюсь ближе и ближе к воссозданию глобального состояния данных, которое в яблочко Какие приспособления были разработаны, чтобы сделать в первую очередь.

Одно противоречивое убеждение, которое я придерживаюсь, состоит в том, что при равных, я предпочитаю один функциональный тест 20 единичным тестам (с использованием языка Rails). Почему? Поскольку функциональный тест доказывает, что конечный результат, который отправляется пользователю, является правильным. Модульные тесты отлично подходят для того, чтобы получить нюансы функциональности, но в конце концов, у вас все еще может быть ошибка вдоль интерфейса, который ломает весь ваш сайт. Функциональные тесты - это то, что дает мне уверенность в развертывании, не загружая страницу в моем браузере. Я знаю, что я мог бы загнать все и проверить оба интерфейса и получить одинаковое покрытие, но если я смогу протестировать весь стек в одном простом тесте за счет небольшого процессора, я бы предпочел сделать это.

Так каковы мои лучшие практики для матчей?

  • Настройте горстку для каждой модели, чтобы охватить самые широкие категории данных
  • При добавлении новой основной функции, которая разрешает многие модели и контроллеры, добавьте несколько новых приборов, чтобы представить основные состояния
  • Избегайте редактирования старых светильников, за исключением добавления/снятия полей
  • Используйте заводы для более мелких/более локализованных вариаций
  • Используйте заводы для тестирования страниц или других массовых созданий, которые необходимы только для нескольких тестов

Также позвольте мне порекомендовать Блог Jay Fields ' Для действительно хорошего прагматического совета по тестированию. Что мне больше всего нравится в блоге Джея, так это то, что он всегда признает, что тестирование очень специфично для проекта, и то, что работает для одного проекта, не обязательно работает для другого. У него не хватает догмы и долго на прагматизме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top