Я изучаю искусство модульного тестирования и BDD, и в моей компании нет никого, кто следует этому подходу. Я много пытаюсь научиться этому самостоятельно, но где-то застреваю и сдаюсь после нескольких дней попыток. Через некоторое время я снова получаю вдохновение от кого-то и снова пытаюсь научиться плавать в этих водах.
Недавно я разработал службу Windows, которая начинала с малого, но в итоге превратилась в большой клуб грязных бизнес-правил. Вот краткий обзор того, чем занимается сервис.
Войдите в базу данных «Служба запускается…»
Получить данные из БД, которые необходимо отправить в другой веб-сервис
Если нет данных для публикации журнала в базе данных «Нет данных для обработки…» и выйдите из службы.
Если данные содержат повторяющиеся значения. Записать в базу данных «Обнаружены повторяющиеся данные, эта запись будет пропущена».
Обновите статус записи, для которой были обнаружены повторяющиеся данные, например, 302
Если данные равны нулю, войдите в базу данных «Запись содержит нулевое значение и не может быть обработана».
Обновите статус записи соответствующим образом, например. 310
Если база данных недоступна или не работает по какой-либо причине, войдите в файл «База данных не работает…»
Если служба не работает, мы должны разместить журнал данных в базе данных «Служба приемника не работает».
Войдите в базу данных «Выход из службы…»
Итак, моя служба в основном извлекает некоторые данные из базы данных, создает из нее запрос JSON и отправляет его в другую службу.
Он также анализирует ответ от этой службы и регистрирует, были ли данные опубликованы успешно или нет. Я только что ввел некоторые бизнес-правила, которые в настоящее время реализованы в службе, чтобы дать вам представление о том, что скрывается под капотом. Я изучаю BDD и модульное тестирование, и мне бы очень хотелось узнать, как эксперт будет писать тестовые примеры, которые проверяют эти сложные бизнес-правила?
Насколько я понимаю, BDD не нужно внутренне сосредотачиваться на том, как написана служба, вместо этого она будет тестировать сценарии, которые служба должна выполнять. Например
При выполнении службы Windows с повторяющимися данными
- Он должен войти в базу данных «Обнаружены повторяющиеся данные, эта запись будет пропущена».
- Он должен обновить статус записи до 302
Я могу написать несколько сценариев, тестирующих некоторые функции службы. Это правильный подход, или мне следует подбирать очень большие наборы сценариев, которые проверяют каждое бизнес-правило в каждом тесте?
Во-вторых, поскольку служба взаимодействует с БД, а также с веб-службой, как я могу протестировать HttpRequest и HttpResponse, которые отправляются и принимаются службой?
Наконец, как мне на самом деле протестировать что-то столь же сложное, как бизнес-правила, которые я написал выше, если я просто утверждаю, что служба вызвала определенный метод какого-то класса, этого достаточно? Откуда мы знаем, что, просто вызвав какой-либо метод, он выполнит правильную задачу?