Ответ
Тесты, в которых для изоляции тестируемого компонента используются mock-объекты (заглушки), называются модульными (unit-тестами).
Цель — проверить логику одного модуля (функции, класса) в изоляции от его зависимостей (например, базы данных, внешнего API или других частей системы).
Пример с unittest.mock в Python:
Предположим, есть функция, которая обращается к внешнему сервису для получения данных о погоде.
from unittest.mock import Mock
# Функция, которую мы тестируем
def get_weather_message(weather_api):
temp = weather_api.get_temperature()
if temp < 0:
return "Очень холодно!"
return "Погода в норме."
# Тест для этой функции
def test_cold_weather_message():
# 1. Настройка (Arrange): создаем mock-объект API
mock_api = Mock()
# Задаем поведение: метод get_temperature() вернет -5
mock_api.get_temperature.return_value = -5
# 2. Действие (Act): вызываем функцию с mock-объектом
message = get_weather_message(mock_api)
# 3. Проверка (Assert): убеждаемся, что функция вернула правильное сообщение
assert message == "Очень холодно!"
# Проверяем, что метод mock-объекта был вызван
mock_api.get_temperature.assert_called_once()
Ключевые преимущества:
- Скорость: Выполняются очень быстро, так как не требуют реальных I/O операций.
- Изоляция: Позволяют тестировать один компонент, не беспокоясь о работоспособности других.
- Контроль: Дают полный контроль над поведением зависимостей (например, имитация ошибок API).