Подтвердить что ты не робот

Интеграция против приемочного теста... что такое огурец/стейк?

Для тестов интеграции моего веб-приложения Rails я использую Стейк (что-то вроде Cucumber). Спецификации Стейка находятся в папке с именем spec/accept. Стейк/огурец теперь для интеграции или приемочного тестирования? Я всегда думал, что это что-то другое.

4b9b3361

Ответ 1

Во-первых, примечание к терминологии: термин интеграционный тест немного расплывчатый в сообществе TDD. В зависимости от того, пришли ли вы из Java или Rails (с помощью Test:: Unit), вы можете понять разные вещи. В Rails (с Test:: Unit) интеграционные тесты - это тесты, которые проверяют ваш полный стек, а функциональные тесты - те, которые проверяют ваш контроллер. Большинство людей в сообществе Java (по крайней мере, по моим наблюдениям) подумают, что это наоборот. Я лично предпочитаю называть тесты тестирования сквозных тестов, в то время как тесты, которые затрагивают несколько уровней системы (но не все), - интеграционные тесты. В общем, это очень зависит от культуры, в которой вы находитесь.

Что касается огурца и стейка - оба являются средами, которые позволяют развивать стиль, известный как Behavior-Driven Development (или BDD для краткости). Дело в том, что у вас есть два уровня тестов:

  • сквозные тесты, которые проверяют ваш полный стек - имитируют браузер, проходят через ваши контроллеры и попадают в базу данных. Огурцы и стейк подходят к этой нише.
  • Модульные тесты, которые тестируют небольшую функциональность в изоляции (обычно это один класс, издеваясь над его сотрудниками). Здесь подходит RSpec.

В BDD вы начинаете с неудачного сквозного теста (с любовью знаете, как "верхняя передача" ), а затем вы начинаете внедрять функциональные тесты сначала с RSpec ( "нижняя передача" ), пока не получите сквозной тест прохождения. Таким образом, сквозной тест управляет вашими модульными тестами, которые, в свою очередь, управляют вашей реализацией. Главное преимущество - избежать ползучести области - вы не в конечном итоге реализуете видимые пользователем функции, которые вам не нужны (так как вы не пишете для него сквозной тест).

Если вам нужна дополнительная информация об этом, я слышал, что статья, написанная на основе поведения Wikipedia, на удивление хороша. Кроме того, книга RSpec.

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

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

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

Стейк, с другой стороны, проще, а Ruby. Вы теряете все преимущества использования английского языка, но можете писать меньше, и он будет выполняться быстрее (несколько).

В нижней строке вы используете оба для написания сквозных тестов, которые приводят к разработке.