Как установить атрибут класса или модуля в 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), исправление будет происходить перед каждым тестом и будет отменено после теста. Как правило, такое поведение, которое вы хотите.

Другие вопросы по тегам