BDD и TDD несопоставимы друг с другом, хотя оба они используются при первой тестовой разработке.
BDD - это больше, чем просто написание тестов с англоязычным синтаксисом, например Киви. BDD (также известный как ATDD - Acceptance Test Driven Development) начинается с разработчиков, QA и дизайнеров (например, бизнес-дизайнеров и дизайнеров взаимодействия), работающих вместе для выработки общего понимания предлагаемого решения. Обычно для иллюстрации поведения используются примеры, также известные как «Спецификация на примере».
Я обнаружил, что полезный способ думать об абстракции - это различать то, что вы делаете (абстрактная, высокоуровневая политика), и то, как вы это делаете (конкретные, низкоуровневые детали). Каждая конкретная деталь существует для выполнения политики более высокого уровня. Когда вы видите что-то конкретное, полезно определить политику, которой оно служит.
Спецификация на примере может использоваться для создания приемочных тестов высокого уровня, которые проверяют, что делает приложение, то есть его поведение.
Модульные тесты используются для проверки того, как приложение реализует решение, то есть для проверки того, что соответствующие сообщения отправляются его соавторам / зависимостям в нужное время.
Фазы стандартного цикла TDD - красный, зеленый, рефакторинг. Во время зеленой фазы ваша цель состоит в том, чтобы пройти тест как можно быстрее, всеми правдами и неправдами - допустимо писать уродливый, неорганизованный код. После прохождения теста вы реорганизуете код, чтобы сделать его более читабельным / изменяемым.
Точно так же с циклом BDD / ATDD у вас есть красный, зеленый, рефакторинг. Во время зеленой фазы BDD просто пройдите приемочные испытания. Весь код, который вы пишете, может существовать внутри самого теста. На этапе рефакторинга BDD вы извлекаете тестовый код в производственный код. Вы можете использовать TDD для управления извлечением.
Итак, для данного приемочного теста BDD у вас может быть несколько тестов TDD.
Что касается тестирования вызовов REST, давайте вернемся к предпосылке абстракции - различению того, что мы делаем, от того, как мы это делаем.
Вызов службы REST - это конкретное действие. Политика, которой он удовлетворяет, может заключаться в предоставлении списка объектов модели.
Допустим, вы реализуете вариант использования, чтобы пригласить друга на обед. Часть ответственности варианта использования - получить список друзей с сервера; его не волнует, как сервер находит друзей.
Ваши тесты BDD помогут получить список друзей, выбрать друга и заполнить приглашение. Ваши тесты BDD не будут беспокоиться о фактических вызовах REST.
Когда вы используете TDD для реализации класса, который обрабатывает связь с сервером, у вас могут быть тесты, которые извлекают JSON из удаленного источника данных (т. Е. С сервера) и гарантируют, что JSON правильно анализируется на объекты модели User
. У вас также могут быть тесты, чтобы охватить источник данных, отвечающий с ошибкой, и т. Д.
В тот момент, когда вы действительно выполняете вызов REST, в реализации удаленного источника данных, который использует REST для связи с внутренним сервером, я бы классифицировал это как интеграционный тест, поскольку вы тестируете интеграцию с компонентом, который вы не используете. control, то есть фактический внутренний сервер. Интеграционным тестам нужно только подтвердить, что сервер возвращает данные JSON в формате, ожидаемом вашим приложением, или что при необходимости возвращаются ошибки.
person
Jeff Gilbert
schedule
22.12.2016