Задать вопрос
mashletov
@mashletov
Math.random()

Несколько простых вопросов по тестированию. Кто поможет?

Сел писать свой первый тест (хлоп-хлоп). Помогите разобраться на cферическом примере.
Допустим, есть у меня сайт — таблица пользователей, форма создания/редактирования и просмотр.
Сущности: resource-контроллер UserController, модель User, вьюхи index/create/edit/show.
Все это готово и работает.

То есть, по идее, мне надо убедиться, что:
  • открывается главная страница
  • пользователи добавляются
  • редактируются
  • просматриваются

Я создал UserTest в папке tests, добавил первую проверку testIndex(), и у меня возникла сразу куча вопросов:
  1. Все эти пункты можно выполнить с помощью $this->visit('/users') / see / dontSee / press.
    Это, я так понимаю, функциональное тестирование. Достаточно ли его будет в этой ситуации?
  2. index еще можно протестировать создав new UserController и вызвав метод index с разными фильтрами (Request) и проверив на ошибки. Тоже самое с моделью, можно сделать: попробовать save с разными параметрами, вместо заполнения формы.Это уже будет Юнит-тест? Нужно ли это если есть п.1 или избыточно?
  3. Все тесты: и юнит, и функциональные могут находиться в одном файле UserTest?
    Или надо их как-то разделять и по запускать по их типу? Надо ли было делить на что-то типа UserControllerTest, UserModelTest, UserFuncTest?
  4. Если я с помощью visit добавляю нового пользователя - как откатить изменения или удалить?
  • Вопрос задан
  • 2082 просмотра
Подписаться 17 Простой 5 комментариев
Решение пользователя latteo К ответам на вопрос (2)
latteo
@latteo
Мне очень помогло вот это видео - https://www.youtube.com/watch?v=8u6_hctdhqI Хотя, стоит заметить, что до него я потратил десятки часов на чтение статей ;)

Хорошей практикой считается создавать suite под разные виды тестов: unit, интеграционные (функциональные), UI
Все они служат для повышение качества софта.

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

То что вы описали $this->visit('/users') / see / dontSee / press. ближе всего к UI тестам. Это проверка софта с точки зрения пользователя. Очень часто они написаны даже не разработчиком, а QA. Если для их выполнения настроить Selenium, то можно приятно удивить клиента :)
Ответ написан