Правильно ли в BDD обходить уровни обслуживания и изменять состояние данных для настроек тестирования?
Используя SpecFlow, мы сделали вызовы нашему сервисному уровню API, который затем общается с постоянным уровнем. Большинство наших сценариев хорошо описаны с использованием API для настройки базы данных в различные состояния, однако есть несколько сценариев, в которые невозможно получить доступ к базе данных через API, так как они являются состояниями сбоя.
Мы думали, что сможем создать слой, с которым взаимодействует решение SpecFlow, которое, в свою очередь, "переводит" базу данных в это состояние, чтобы мы могли затем вызвать уровень API, чтобы проверить, получим ли мы ожидаемый ответ. Однако правильно ли это с точки зрения BDD? Мое понимание BDD очень похоже на ATDD, в котором вы тестируете свои основные и удачные пути, а мелкозернистые элементы должны быть проверены модульно.
Если вы не можете сделать что-то через API, разве это не должно быть проверено в ваших сценариях BDD?
1 ответ
Я не вижу никаких проблем с этим.
На самом деле ваш Given
Шаги должны быть в состоянии сделать то, что необходимо для настройки тестируемой системы в соответствии с требованиями вашего теста. То, что вы тестируете, это When
и проверка его с помощью Then
,
Если эти шаги всегда позволяют выполнить настройку через API, то отлично, вы получаете хорошее тестовое покрытие для обоих, но могут быть ситуации (как вы описали), когда вы не можете легко привести систему в нужное состояние, используя API. В этом случае вам может потребоваться вставить данные шаги непосредственно в базу данных или вызвать какую-либо службу тестирования для настройки состояния.
Вы также можете обнаружить, что вам нужно сделать то же самое с вашим Then
шаги, если результаты вашего действия не видны публично через API.
Вы также можете обнаружить, что на самом деле вызов вашего API слишком медленный или слишком сложный, чтобы выполнить настройку, которая вам нужна (особенно для сложных рабочих процессов), и поэтому вы можете вставить данные непосредственно в базу данных в ваших заданных шагах, чтобы ваши тесты были быстрее и быстрее. не нужно проходить через такие сложные настройки.
Имейте в виду, однако, что это само по себе стоит того, что если ваша схема базы данных изменится, вам может потребоваться обновить реализацию API И обновить шаги, которые вставляют данные напрямую.
Стоит ли брать на себя эту стоимость, вам решать.