четверг, 20 июня 2013 г.

Заметка о фикстурах: добро это или зло?

Что такое фикстуры?

Автоматические тесты необходимо выполнять неоднократно. Мы хотели бы выполнять
тесты в некоторых известных состояниях для гарантии повторяемости процесса
тестирования. Эти состояния называются фикстуры. Например, для тестирования
функции создания записи в приложении блога, каждый раз, когда мы выполняем
тесты, таблицы, хранящие соответствующие данные о записях (например, таблицы
Post, Comment), должны быть восстановлены к некоторому фиксированому
состоянию.

Данное определение взято из документации фреймворка Yii. Я с ним полностью согласен и считаю что от смены языка и смены фреймворка данное определение не изменится.

Добро?

Сначала кратко расскажу о плюсах использования фикстур:
  1. Всегда есть возможность откатить систему к идеальному состоянию
  2. Возможность хранить и использовать большой объем тестовых данных
  3. Ожидаемое поведение тестов на наборе данных
Казалось бы теперь можно отказаться от генерации в функциональных тестах нужных сущностей( т. е. например не создавать новый пост напрямую в браузере, а загрузить его в базу из фикстуры), база работает очень быстро.

Зло?

Теперь о минусах:

  1. Невозможно запускать тесты в параллельном режиме так как могут возникать локи в базе данных при накатывании фикстур
  2. При огромном количестве фикстур их поддержка может занимать продолжительное время
  3. При сильно связанной базе может иногда проблематично накатить ограниченный набор фикстур( приходится накатывать их все, а это занимает продолжительное время)

Выводы

Работа с фикстурами в тестах всегда оставляет двоякое впечатление. До определенного предела они помогают, но когда их становится слишком много и тесты начинают сильно на них завязываться, фикстуры начинают мешать.

Перед использованием фикстур в ваших авто-тестах стоит неоднократно подумать.