Сколько интеграционных тестов (или сценариев) я должен написать для каждой функции?

Сейчас я смотрю на проект, в котором есть как модульные, так и интеграционные тесты (с использованием BDD).

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

Правильно ли я сказал, что эти интеграционные тесты предназначены для проверки правильности потоков данных через компоненты, поэтому нормально иметь только один набор значений?

И что "перестановки" данных должны быть проверены в модульных тестах? Итак, мы знаем, что отдельные единицы могут обрабатывать разные данные.

Или я полностью пропустил трюк?

2 ответа

На самом деле, тестирование только одного набора данных очень минимально. Вероятно, это всего лишь один сценарий хорошего поведения погоды.

Я предлагаю также добавить плохое поведение погоды.

По поводу перестановок: это может легко выйти из-под контроля. Для этого, охват Google / MC: изменение условий решения. Это уменьшает максимальное количество всех возможностей, сохраняя при этом тот же охват с этой точки зрения.

В BDD интеграционные тесты имеют две цели:

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

  • Во-вторых, интеграционные тесты выполняют то, что вы сказали: они проверяют правильность каждого взаимодействия между компонентами, тестируемыми модулем.

Если вы разрабатываете тесты в первую очередь, вы, как правило, обнаруживаете, что тест-драйв мотивирует все необходимые интеграционные тесты, но если вы пишете некоторый код перед тестами, вам, возможно, придется вернуться и написать больше интеграционных тестов, чтобы иметь достаточный охват интеграцией. В этом случае вы должны попытаться провести обратное проектирование бизнес-причины, по которой вы написали этот код, и выразить его в интеграционном тесте, который показывает ценность для бизнеса.

Достаточно ли "одного набора значений" для данного интеграционного теста, зависит от бизнес-смысла каждого возможного набора значений. Например, если вы обрабатываете чек, вам могут потребоваться три интеграционных теста:

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

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

PS: "тест интеграции" означает разные вещи в разных контекстах, но я пошел с вашей терминологией. Я предполагаю, что под "интеграционным тестом" вы подразумеваете что-то вроде сценария Cucumber, с акцентом на то, что он является частью спецификации, а не техническими деталями того, как работает тест.

Другие вопросы по тегам