Похожие презентации:
UNIT - test. Модульное тестирование
1. UNIT - TEST
МодульноеТестирование
2. Что такое юнит-тест
В программировании под термином «юнит» понимается отдельная часть кода— функция, метод или класс.
Юнит-тесты — это автоматизированные проверки, которые направлены на
тестирование именно таких отдельных компонентов.
3. Что такое моки в юнит-тест и для чего они нужны
• Моки — это специальные объекты, которые используются в юнит-тестахдля имитации поведения реальных компонентов или внешних
зависимостей.
• Эмулируют поведение внешних сервисов или компонентов —
например, возвращают заранее заданные данные;
• Позволяют контролировать ответы и сценарии работы — чтобы
протестировать разные варианты поведения функции;
• Изолируют тестируемый код — чтобы тест проверял только логику самой
функции, а не работу внешних сервисов.
4. Пример
• Если функция обращается к базе данных, то вместо реальногоподключения в тестах используют мок, который возвращает нужные данные
мгновенно и в нужном формате, без реального запроса к базе.
• Моки — это «фейковые» или заглушечные объекты, которые помогают
тестировать код изолированно и эффективно, имитируя внешние
зависимости.
5. Пирамида тестирования
Существует так называемая пирамида тестирования, состоящая из трёхуровней:
• Юнит-тесты — базовый и наиболее обширный уровень;
• Интеграционные тесты — проверяют взаимодействие между
компонентами;
• Системные тесты — оценивают работу всей системы в целом.
6.
• Юнит-тесты преимущественно составляют основу тестового покрытия, таккак они быстры, экономичны и позволяют эффективно контролировать
качество кода. Интеграционные и системные тесты, несмотря на свою
важность, обычно пишутся в меньшем объёме ввиду большей сложности и
затрат времени.
7. Плюсы юнит-теста
• Изоляция — тестируется конкретный блок кода, внешние зависимостизаменяются заглушками;
• Высокая скорость выполнения — тесты запускаются быстро, что
способствует частому и регулярному тестированию;
• Широкое покрытие — позволяет проверить большинство строк и
логических ветвлений кода.
8. Виды юнит-тестов
• Позитивное тестирование — проверка корректной работы пристандартных входных данных;
• Негативное тестирование — оценка поведения системы при
некорректных или нестандартных данных;
• Граничное тестирование — проверка на крайних значениях допустимого
диапазона;
• Тестирование состояния — проверка ожидаемых изменений состояния
системы после выполнения функции.
9. Автоматизация
• Юнит-тесты обычно автоматизированы, что позволяет запускать ихмногократно и интегрировать в процесс непрерывной интеграции (CI/CD).
Автоматический запуск тестов после каждого изменения помогает быстро
выявлять дефекты.
• Термин coverage означает процент строк кода, которые выполняются при
запуске тестов. Чем выше покрытие, тем меньше вероятность пропустить
ошибку, но 100% покрытие не гарантирует отсутствие дефектов.
10. Принципы юнит-тестов
• Один тест — одна проверка: каждый тест должен проверять одинконкретный аспект работы функции.
• Повторяемость: тесты должны давать одинаковый результат при каждом
запуске, независимо от окружения.
• Изоляция: тесты не должны зависеть друг от друга или от внешних
ресурсов.
• Прозрачность: в случае ошибки тест должен давать понятное сообщение,
чтобы легко определить причину.
11. Инструменты по языкам
• Для Python: unittest, pytest, nose• Для JavaScript: Jest, Mocha, Jasmine
• Для Java: Junit, TestNG
• Для C#: Nunit, xUnit
12. Как начать тестировать
1.Определить функцию или метод для проверки и ожидаемый результат.2.Организовать изолированное тестовое окружение, при необходимости
используя моки.
3.Написать тестовый код с помощью специализированных фреймворков.
4.Запустить тест и проанализировать результаты.
5.При необходимости исправить ошибки и провести рефакторинг.
6.Повторять процесс для новых функций и изменений.
13. Простой калькулятор
14. Юнит-тест калькулятора
15. Объяснение кода юнит-теста
Импорт модуля, фреймфорк длятестирования в python
Импорт класса Calculator из
calc.py
setup – метод, перед каждым
отдельным тестом
Внутри объект Calculator
Создаём новый класс тестов
сохраняыется в self.calculator, чтобы
TestCase – базовый класс инструментов
каждый день был новым, бзе следов
для теста
предыдущих тестов
16.
Создаём метод test_plus.Имя теста начинается с test_ для
понимания unittest.
Внутри вызываем метод plus из Calculator и задаём значения 4 и 7
Self.assertEqual проверят результат метода plus = 11. Если не так = error
Эта часть отвечает за запуск тестов (python test_calc.py)
unittest,.main() находит все тестовые методы в файле, начинающиеся с
test_
Результат выводится в консоль
17. Рекомендации к написанию тестов
• Чёткое понимание задачи — перед написанием тестов необходимо хорошоразобраться с функционалом.
• Принцип «новый код — новый тест» — тесты пишутся одновременно с
разработкой новой функциональности.
• Строгий контроль качества — внедрение политики, при которой код без тестов
не принимается.
• Использование готовых инструментов — фреймворки для тестирования
(например, pytest или unittest для Python).
• Принцип простоты — разделение сложных функций на более простые для
удобства тестирования.
18.
• Не забывать о негативных тестах — проверка устойчивости к ошибочнымданным.
• Полное покрытие логики — тестирование всех возможных ветвлений и
условий.
• Постоянный контроль качества — использование инструментов для
анализа покрытия и мутационного тестирования.
• Оптимизация скорости выполнения тестов — разбивка длительных
тестов на более короткие.
• Независимость тестов — каждый тест должен запускаться автономно, без
зависимости от других.
Программирование