Сколько интеграционных тестов (или сценариев) я должен написать для каждой функции?
Сейчас я смотрю на проект, в котором есть как модульные, так и интеграционные тесты (с использованием BDD).
Интеграционные тесты используют один файл значений для каждого теста. (Учитывая, что существует почти неограниченная перестановка наборов данных.) Я пытаюсь выяснить, нормально ли это и почему. (Я очень плохо знаком с "тестированием".)
Правильно ли я сказал, что эти интеграционные тесты предназначены для проверки правильности потоков данных через компоненты, поэтому нормально иметь только один набор значений?
И что "перестановки" данных должны быть проверены в модульных тестах? Итак, мы знаем, что отдельные единицы могут обрабатывать разные данные.
Или я полностью пропустил трюк?
2 ответа
На самом деле, тестирование только одного набора данных очень минимально. Вероятно, это всего лишь один сценарий хорошего поведения погоды.
Я предлагаю также добавить плохое поведение погоды.
По поводу перестановок: это может легко выйти из-под контроля. Для этого, охват Google / MC: изменение условий решения. Это уменьшает максимальное количество всех возможностей, сохраняя при этом тот же охват с этой точки зрения.
В BDD интеграционные тесты имеют две цели:
Вы пишете интеграционные тесты для тест-драйва (чтобы заставить вас реализовать так, чтобы тесты проходили) - основные области поведения вашего приложения. Интеграционные тесты - это спецификация, средство связи между разработчиками и заинтересованными сторонами, а также между разработчиками и будущими разработчиками.
Во-вторых, интеграционные тесты выполняют то, что вы сказали: они проверяют правильность каждого взаимодействия между компонентами, тестируемыми модулем.
Если вы разрабатываете тесты в первую очередь, вы, как правило, обнаруживаете, что тест-драйв мотивирует все необходимые интеграционные тесты, но если вы пишете некоторый код перед тестами, вам, возможно, придется вернуться и написать больше интеграционных тестов, чтобы иметь достаточный охват интеграцией. В этом случае вы должны попытаться провести обратное проектирование бизнес-причины, по которой вы написали этот код, и выразить его в интеграционном тесте, который показывает ценность для бизнеса.
Достаточно ли "одного набора значений" для данного интеграционного теста, зависит от бизнес-смысла каждого возможного набора значений. Например, если вы обрабатываете чек, вам могут потребоваться три интеграционных теста:
- тот, в котором чек меньше доступных средств и платеж успешно завершен
- тот, в котором чек для более чем доступных средств, и счет становится списанным
- тот, в котором проверка как-то недействительна и есть ошибка.
Вы использовали бы модульные тесты для выявления незначительных изменений в этих сценариях, например, в различных сценариях ошибок (один, где сумма на чеке равна нулю, один, где он не читается, а другой - где он не с правого берега), которые все приводят к отображению ошибка на экране.
PS: "тест интеграции" означает разные вещи в разных контекстах, но я пошел с вашей терминологией. Я предполагаю, что под "интеграционным тестом" вы подразумеваете что-то вроде сценария Cucumber, с акцентом на то, что он является частью спецификации, а не техническими деталями того, как работает тест.