Python для продвинутых: ООП, типизация и тестированиеОткрытые материалыMonkeypatch и mock в pytest: когда что применять

Monkeypatch и mock в pytest: когда что применять

Уроки курсаMonkeypatch и mock в pytest: когда что применять

Тест должен контролировать нестабильные зависимости: текущее время, случайность, переменные окружения и сетевые клиенты. Fixture monkeypatch временно меняет атрибут, словарь, окружение или текущую директорию и автоматически возвращает состояние после теста.

def test_mode_from_env(monkeypatch):
    monkeypatch.setenv("APP_MODE", "test")
    assert read_mode() == "test"

Для объекта можно использовать monkeypatch.setattr(module, "name", replacement). Подменять нужно имя там, где код его ищет, а не обязательно там, где функция была определена изначально. Это частая причина «mock не сработал».