2016-06-09 15 views
0

Я начинаю небольшой проект в Python, и я хочу создать unittest с py.test. Мне нужно запланировать модуль pymongo или класс MongoClient. Так что я пытался что-то вроде этого:Как установить атрибут класса или модуля в patchmonkey в py.test

@pytest.fixture(scope='module') 
def mock_pymongo(monkeypatch): 
    monkeypatch.setattr('pymongo', mongomock) 

или Somthing так:

@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) 

Может быть, я m, используя нужный инструмент , но есть ли способ использовать monkeypatch, чтобы издеваться над классом и модулем в моем модульном тесте?

ответ

0

Аргумент scope не указывает, что исправить - он определяет срок службы прибора. При использовании области по умолчанию (module) исправление произойдет до каждого теста и будет отменено после теста. Это обычно поведение, которое вы хотите.