UNIT - TEST
Что такое юнит-тест
Что такое моки в юнит-тест и для чего они нужны
Пример
Пирамида тестирования
Плюсы юнит-теста
Виды юнит-тестов
Автоматизация
Принципы юнит-тестов
Инструменты по языкам
Как начать тестировать
Простой калькулятор
Юнит-тест калькулятора
Объяснение кода юнит-теста
Рекомендации к написанию тестов
170.23K
Категория: ПрограммированиеПрограммирование

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.

• Не забывать о негативных тестах — проверка устойчивости к ошибочным
данным.
• Полное покрытие логики — тестирование всех возможных ветвлений и
условий.
• Постоянный контроль качества — использование инструментов для
анализа покрытия и мутационного тестирования.
• Оптимизация скорости выполнения тестов — разбивка длительных
тестов на более короткие.
• Независимость тестов — каждый тест должен запускаться автономно, без
зависимости от других.
English     Русский Правила