2015-02-23 7 views
0

Symfony testing documentation действительно не говоря уже о различии между функциональными тестами и интеграционных тестами, но я понимаю, что they are different.Путаницы практики тестирования Symfony: функциональная против интеграции тестирования

Symfony документы описывают функциональное тестирование, как это:

  1. Сделать запрос;
  2. Проверьте реакцию;
  3. Нажмите на ссылку или отправьте форму;
  4. Проверьте реакцию;
  5. Промыть и повторить.

Хотя Ruby on Rails docs описывают это так:

  1. был запрос веб успешным?
  2. был пользователь перенаправит нужную страницу?
  3. был ли пользователь успешно аутентифицирован?
  4. был правильным объектом, хранящимся в шаблоне ответа?
  5. было соответствующее сообщение, отображаемое пользователю в представлении?

The Symfony документы, кажется, описывая что-то более похожее на интеграции тестирования. Нажатие ссылок, заполнение форм, отправка их и т. Д. Вы тестируете, что все эти разные компоненты взаимодействуют должным образом. В их примере теста они в основном проверяют все действия контроллера, перемещая веб-страницы.

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

+0

Я бы отменил все это в BDD .... и вы сравниваете общий пример symfony с примером ROR, содержащим даже данные, сохраняющиеся и аутентификацию пользователя ... –

+0

Моя точка зрения заключается в том, что Symfony предлагает писать функциональные тесты, которые делают больше, чем просто запрос и тестирование ответа. Они предлагают вам «щелкнуть» и «просмотреть» результат для тестирования других компонентов. Документы Rails не предлагают этого, поскольку они говорят об этом в тестах интеграции. Docs – Brian

+0

Rails не имеют окончательного подхода к тестированию. Это просто один из способов сделать это. –

ответ

1

То, как я вижу это, 2 списка не противоречит друг другу. Первый список (Symfony) можно рассматривать как метод предоставления ответов для второго списка (Rails).

Оба списка звучат как функциональные испытания для меня. Они используют приложение в целом, чтобы определить, удовлетворяет ли приложение требованиям. Второй список (Rails) описывает типичные вопросы, чтобы определить, удовлетворяются ли требования, первый список (Symfony) предлагает метод ответа на эти вопросы.

Интеграционные тесты более сосредоточены на том, как работают единицы. Скажем, у вас есть единица репозитория, которая зависит от уровня абстракции базы данных. A unit test может убедиться, что репозиторий сам функционирует правильно, удаляя/выбивая слой абстракции базы данных. Тест интеграции будет использовать оба устройства, чтобы убедиться, что они действительно работают вместе, как они должны.

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

PS: Функциональные испытания, которые на самом деле используют (безголовый) браузер, часто называют приемочным тестированием.

2
  • Модульное тестирование относится испытать методы класса, один за другим, и убедитесь, что они делают правильные звонки в правильном контексте. Если эти методы используют зависимости (инъецируемые службы или даже другие методы этого класса), мы издеваемся над ними, чтобы изолировать тест только от текущего метода.

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

  • Функциональное тестирование относится к ручному вызову приложения юзабилити в режиме предварительной обработки. У вас есть команда по обеспечению качества, которая выведет некоторые сценарии, чтобы проверить, работает ли ваш сайт так, как ожидалось. Ручное тестирование даст вам обратную связь, которую вы не можете получить автоматически, например, «эта кнопка уродливая», «эта функция слишком сложна в использовании» или любые другие субъективные обратные связи, которые человек (который обычно будет думать как клиент) может дать ,

+3

Пожалуйста, объясните downvotes - я рад совершить ошибки, и я еще более счастлив, когда понимаю, почему. –

1

В обоих документах, посвященных документам, описаны функциональные тесты. Функциональные тесты выполняются с точки зрения пользователя (обычно на уровне GUI). Он проверяет, что пользователь увидит, что произойдет, если пользователь представит форму или нажмет на какую-нибудь кнопку. Неважно, если это автоматический или ручной процесс.

Затем проводятся интеграционные и модульные испытания. Эти тесты находятся на более низком уровне. Основное предсказание для модульных тестов заключается в том, что они изолированы. Вы можете проверить конкретный объект и его методы, но без внешних или реальных зависимостей. Это то, что mocks (в основном макет имитирует реальный объект в соответствии с потребностями в единичном тестировании). Без понимания IOC действительно сложно написать изолированные тесты.

Если вы пишите тесты с использованием реальных/внешних зависимостей (без макетов), вы пишете тесты интеграции. Интеграционные тесты могут проверить взаимодействие двух объектов или всего пакета/модуля, включая запрашивая базу данных, отправка почты и т.д.

1

Да, вы overthinking вещи;)

Я не знаю, почему Symfony или Рубин на Rails заявляет вещи как это. Есть время, когда тестирование зависит от того, как он смотрит на него. Итог: это не имеет значения. Единственное, что важно, это уверенность в том, что тест дает вам то, что вы делаете.

Кроме того, тесты живы и должны развиваться вместе с вашим кодом. Я иногда тестирую только для определенного кода состояния HTTP, в других случаях я изолирую модуль и модуль проверяю его ... зависит от времени, которое я должен потратить, преимуществ и т. Д.

Если у меня есть код, который только используется в контроллере, я обычно иду на функциональный тест. Если я использую утилиту, я обычно отправляюсь на модульное тестирование.

Смежные вопросы