О чем этот материал
Пирамида тестирования, моки, стабы, тест-кейсы и практический смысл тестов.
Это адаптированная версия учебной презентации: слайды разобраны в формате обычной статьи, чтобы материал было легче читать с телефона и возвращаться к нужным блокам позже.
Что внутри
Ниже краткий план материала. По нему удобно понять, в каком порядке разбирать тему.
- Зачем нужны тесты
- Пирамида тестирования
- Юниты
- Интеграционные
- Системные
- End-To-End
- Основные понятия в тестировании
- Немного практики
Зачем?
- Обеспечение качества (надежности, стабильности)
- Предотвращение регрессии (чтоб ничего не поломалось)
- Документирование кода
- Заставляет лучше архитектурить
- Test Driven Development
Пирамида тестирования
Приемочные, E2E…
Системные
Интеграционные
Юнит тесты
Unit tests
Юнит тесты
методы
текущего модуля (или почти)
- Тестируем отдельные функции или
- Всегда автоматизированые
- Не задействуют ничего кроме
Integration tests
Интеграционные тесты
инфраструктура
- Тестируем связку модулей
- Обычно автоматизированые
- Задействуется внешние системы и
System tests
Системные тесты
полностью
- Тестируем систему (продукт)
- Инфраструктура ближе к боевой
- Подход “черный ящик”
Acceptance tests
Приемочные тесты
внешними инструментами
- Пользовательские сценарии
- Как правило тестирование выполняется
Еще немного терминов
Моки (Mocks) — это объекты, которые имитируют поведение реальных объектов в контролируемом виде.
Стабы (Stubs) — это упрощенные версии объектов или функций, которые возвращают заранее определенные ответы. Они используются для замены реальных компонентов при тестировании.
Тест кейсы (Test Cases) — это отдельные сценарии тестирования. Каждый тесткейс имеет входные данные и ожидаемый результат.
Ассерт (Assert) — это утверждения, которые проверяют, соответствует ли результат выполнения теста ожидаемому. Если условие ассерта не выполняется, тест считается проваленным.
Тесты в Go
Команды
`go test` - запуск тестов в текущем проекте
Флаги:
`go test -v ` - (verbose) вывести лог тестирования
Тестирование HTTP
Пакет "net/http/httptest"