В основном
Когда у вас достаточно автоматических тестов, чтобы быть уверенным в своем конвейере непрерывной интеграции?
Ответ, вероятно, станет ясным, если вы подумаете о том, в чем вы хотите быть уверены. В конечном счете, это карты 1-1; каждый тест дает вам уверенность в одном:
- Модульное тестирование дает вам уверенность в том, что класс (или модуль) выполняет то, для чего он тестируется.
- Интеграционное тестирование дает вам уверенность в том, что несколько устройств работают вместе так, как это проверяется.
- Сквозное тестирование дает вам уверенность в том, что все приложение выполняет определенную функцию, как это описано в тесте.
Исходя из того, как вы сформулировали свой вопрос, вы, вероятно, думаете прямо сейчас, например:
Я хочу быть уверен , что мое приложение может сделать X .
Таким образом, вы пишете сквозной тест, который пытается выполнить X и проверяет, правильно ли он это делает.
Более конкретный
Это все очень ссылаться на себя, но это потому, что к этому все сводится. Там просто не более того.
Например, представьте, что вы пишете приложение для создания кулинарных рецептов. Одна особенность заключается в том, что, если вы добавляете разные количества нескольких разных видов сыра, это дает вам правильную температуру и время, чтобы все они плавились.
Таким образом, вы можете написать тестовый модуль для вашего CheeseMeltCalculator
, где вы даете ему 100 г Гауда и 200 г сыра Эмменталь, а затем вы проверяете, что температура и время оказываются правильными. Это означает, что теперь вы можете быть уверены, что это подходит CheeseMeltCalculator
для 100 г гауда и 200 г сыра. Теперь, если вы повторите этот тест с 300 г гауды вместо 200 г, вы можете быть совершенно уверены, что он работает правильно для разных значений. Вы можете добавить тесты для 0
, -1
и int.MaxValue
г Гауда , чтобы быть уверенным в том , что код не подножки (или поездки правильно , как предполагался) для странного ввода.
Вы можете написать интеграционный тест, чтобы проверить, CheeseMeltCalculator
правильно ли он включен во весь процесс расчета температуры и времени еды. Если это не так, но приведенные CheeseMeltCalculator
выше тесты хороши, вы можете быть уверены, что ошибка в других калькуляторах или в способе комбинирования данных из разных калькуляторов.
И, наконец, вы можете написать сквозной тест для создания целого рецепта, и одна из вещей, которые вы проверяете, это температура и время результата. Если предыдущие 2 уровня испытаний в порядке, но для этого все идет не так, вы снова можете быть уверены, что эти части верны, и ошибка заключается в том, что расчет температуры интегрирован в приложение. Например, возможно, пользовательский ввод передан неправильно.
И, наконец , если все эти тесты в порядке, то вы можете быть уверены, что « если вы добавите разные количества разных видов сыра, это даст вам правильную температуру и время, чтобы все они плавились »
Короче говоря
Дело в том, что у вас не может быть теста «он работает правильно». Вы можете только проверить «Если я делаю X, Y случается».
Тем не менее, это именно то, что должно быть в технических спецификациях для проекта. Такое утверждение, как « если вы добавляете разные количества нескольких разных видов сыра, дает правильную температуру и время, чтобы они все плавились », не только дает клиенту четкие ожидания относительно того, что будет делать готовый продукт, но также может быть перевернуто в автоматизированные тесты.
Дополнительная информация
Пользователь Richard добавил эту информацию в редактирование:
У Мартина Фаулера есть очень хорошее резюме на его веб-сайте о наиболее распространенных стратегиях: https://martinfowler.com/articles/microservice-testing/
Я не хочу удалять это, но я хочу сказать следующее: по сравнению с этим ответом, это не «краткое изложение», а гораздо более подробное объяснение, с хорошей графикой и всем остальным.
Мой совет: если после прочтения моего ответа все будет иметь смысл, все готово. Если вещи все еще кажутся неясными, выделите немного времени и прочитайте связанную статью.