Расширение pytest, позволяющее подменять зависимости имитаторами.
Расширение представляет фикстуру stub, позволяющую имитировать наличие пакета/модуля путём временной манипуляции с sys.modules.

    def test_some(stub):

stub.apply({
# Заменяем call_command автоматически сгенерированной функцией.
'django.core.management.call_command': '[func]',

# Заменяем класс BaseCommand автоматически сгенерированным классом.
'django.core.management.base.BaseCommand': '[cls]',

# Заменяем атрибут dummy сгенерированным объектом MagicMock.
'django.dummy': '[mock]',

# Полностью подменяем модуль cv2 на MagicMock.
'cv2': '[mock]',

# Иногда нам нужен всегда один и тот же MagicMock, а не генерируемый заново.
'numpy': '[mock_persist]',

# Подменяем несколько атрибутов в одном модуле некими объектами.
'django.conf': {
'settings': object(),
'some': True,
},

})

Если требуется подменить зависимость глобально, а не фикстурой, можно в корневом conftest.py вызвать stub_global(). При этом подмена будет произведена до обнаружения тестов, а значит код в тестах сможет импортировать код, использующий зависимость.

    from pytest_stub.toolbox import stub_global

stub_global({
'cv2': '[mock_persist]',
})

Смотрите также:
* Анонс pytest-stub 0.1.0 для подмены пакетов, модулей, атрибутов

Категории

Область
Проект

На заметку
Зарегистрированные пользователи могут получать еженедельный дайджест обновлений на сайте.