2016-06-09 11 views
0

Ich beginne ein kleines Projekt in Python und ich möchte einen Unittest mit py.test erstellen. Ich muss ein pymongo Modul oder eine MongoClient Klasse patchen. Also habe ich versucht, so etwas wie dieses:Wie man ein Klassen- oder Modulattribut in einem Patchmonkey in py.test setzt

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

oder somthing wie folgt aus:

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

jetzt in beiden Test ich tue ich

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) 

Vielleicht einen Bereich Konfliktfehler erhalte ich‘ m mit dem richtigen Werkzeug aber gibt es eine Möglichkeit monkeypatch zu verwenden, um Klasse und Modul in meinem Komponententest zu verspotten?

Antwort

0

Das Argument scope legt nicht fest, was zu patchen ist - es gibt die Lebensdauer des Geräts an. Mit dem Standardbereich (module) findet das Patchen vor jedem Test statt und wird nach dem Test zurückgesetzt. Das ist im Allgemeinen das Verhalten, das du willst.