Я изучаю искусство модульного тестирования и BDD, и в моей компании никто не следует этому подходу. Я многому научился, чтобы узнать это сам, но где-то застрял и сдался после нескольких дней. Через некоторое время я снова получаю вдохновение от кого-то и пытаюсь научиться плавать в этих водах снова.Как реализовать BDD по очень сложным бизнес-правилам?
Я недавно разработал Службу Windows, которая начиналась с малого, но в конечном итоге превратилась в большой шар грязных бизнес-правил. Вот краткий обзор того, что делает служба.
Вход в базу данных «Запуск службы ...»
Получить данные из БД, которая должна быть размещена на другой веб-службы
Если нет никаких данных, чтобы создавать Вход в базу данных «Нет данные для обработки ...» и выездного обслуживания
Если данные содержат повторяющиеся значения записывать базы данных«повторяющиеся данные найденными, эта запись будет пропущена.
Update был найден статус записи, для которых дублируют данные к чему-то, например 302
Если данные нуля, Бревенчатые в базу данных «Запись содержит нулевое значение и не может быть обработана.»
Обновление статуса записи надлежащим образом, например, 310
Если база данных недоступна или вниз из-за какой-то причине, лаг в файле «База данных вниз ...»
Если служба там, где мы должны размещать журнал данных в базу данных «приемник обслуживание вниз.»
Вход в базу данных„Exiting службы ...“
Так что моя служба в основном извлекает некоторые данные из базы данных, создает запрос JSON из него и отправить его к другому существу rvice.
Он также анализирует ответ от этой службы и регистрирует, если данные были успешно опубликованы или нет. Я только что ввел некоторые из бизнес-правил, которые в настоящее время реализованы в сервисе, чтобы дать вам представление о том, что лежит под капотом. Я изучаю BDD и модульное тестирование, и мне очень понравилось бы, как эксперт будет писать тестовые примеры, которые проверяют эти сложные бизнес-правила?
Из моего понимания BDD не нужно сосредоточиться внутри того, как написано служба, вместо этого он будет тестировать сценарии, служба должна выполнить Например
При выполнении служебных окон с повторяющимися данными
- Он должен регистрироваться в базе данных «Дублированные данные, эта запись будет пропущена.»
- Необходимо обновить статус записи до 302
Я могу написать несколько сценариев, которые проверяют некоторые функциональные возможности сервиса. Является ли это правильным подходом или я должен использовать очень большие наборы сценариев, которые проверяют каждое бизнес-правило в каждом тесте?
Во-вторых, как служба связывается с БД, а также с веб-службой, как я могу проверить HttpRequest и HttpResponse, которые отправляются и получаются службой?
Наконец, как я могу проверить что-то сложное, как бизнес-правила, которые я написал выше. Если я просто утверждаю, что сервис, называемый каким-то определенным методом какого-то класса, достаточно? Как мы знаем, что, просто называя какой-то метод, он выполнит правильную задачу?
Большое спасибо за ваш ценный ответ. Он упустил много путаницы в моем сознании.Прежде чем я получу очень конкретную информацию о моем текущем сценарии, я хотел бы спросить у вас сценарий сценария, который я написал При выполнении службы Windows с дублирующимися данными Он должен регистрироваться в базе данных «Дублированные данные, эта запись будет пропущена. " Он должен обновить статус записи до 302 Этот сценарий кажется действительным для вас в перспективе BDD, поскольку он не описывает полное поведение службы только одним сценарием ... –
@AfrazAli хорошо, что часть я не полностью конечно. Мне кажется, что когда вы пытаетесь дублировать запись, вы должны предупредить пользователя. Также представляется целесообразным обновить запись, чтобы указать, что «пользователь» попытался вставить дубликат записи. Но тот факт, что вы записываете эту попытку как «302», кажется, слишком низкоуровневая, по крайней мере, в отношении теста BDD. Подобно программированию на интерфейс, вы бы хотели разоблачить некоторый метод, который заботится об этой логике, но скрыть эти детали из API (и, следовательно, BDD-тест). Он должен иметь возможность называть что-то вроде 'wasDupeAttempted()' – Damon
Чтобы идти немного дальше, я думаю, что вашему тесту BDD действительно все равно, что написано в базе данных, только то, что ваше приложение ведет себя как и ожидалось. Информация, записанная в базу данных, вероятно, слишком низкоуровневая для BDD, о которой нужно заботиться, но BDD должен иметь возможность проверять вещи на этом объекте, такие как он был сохранен, а сохранение привело к тому, что он обнаружил дублируемую запись, и что он правильно раскрывает, что была сделана попытка повторного ввода, чтобы вы могли реагировать на нее. Не стоит заботиться о том, что на самом деле написано в базе данных. – Damon