Как установить атрибут класса или модуля в patchmonkey в py.test
Я начинаю небольшой проект на Python и хочу создать юнит-тест с py.test. Мне нужно залатать pymongo
модуль или MongoClient
учебный класс. Поэтому я попробовал что-то вроде этого:
@pytest.fixture(scope='module')
def mock_pymongo(monkeypatch):
monkeypatch.setattr('pymongo', mongomock)
или что-то вроде этого:
@pytest.fixture(scope='class')
def mock_pymongo(monkeypatch):
monkeypatch.setattr('pymongo.mongo_client.MongoClient', mongomock.mongo_client.MongoClient)
Теперь в обоих тестах я делаю, я получаю ошибку несоответствия области
scopeMismatch: You tried to access the 'function' scoped fixture 'monkeypatch' with a 'module' scoped request object, involved factories
tests/test_1.py:17: def mock_pymongo(monkeypatch)
Может быть, я использую правильный инструмент, но есть ли способ использовать monkeypatch для того, чтобы смоделировать класс и модуль в моем модульном тесте?
1 ответ
scope
Аргумент не указывает, что патчить - он указывает время жизни прибора. С областью по умолчанию (module
), исправление будет происходить перед каждым тестом и будет отменено после теста. Как правило, такое поведение, которое вы хотите.