2017-06-30 8 views
0

An der Spitze des Codes ich testen möchte, muss ich einen Import wie:Python - Mock importiert Wörterbuch

from resources import RESOURCES 

wo RESOURCES ein Wörterbuch der Werte.

Wie kann ich es im Test verspotten?

Was ich möchte, ist, egal was im realen Modul ist, ein gut bekanntes Wörterbuch zurück.

Zum Beispiel in einem Test mag ich RESOURCES sein:

{ 
    'foo': 'bar' 
} 

während in einem anderen Test, den ich will es sein:

{ 
    'something': 'else' 
} 
+0

Was genau meinst du mit "Mock it"? –

+0

Wie gut müssen Sie es "verspotten". Müssen Sie das Modul testen, müssen Sie das Modul vortäuschen? Brauchen Sie nur eine 'RESOURCES' Definition, oder benötigen Sie einen falschen Eintrag in' sys.modules'? –

+0

Sie können ein lokales (dh dasselbe Verzeichnis) Modul 'resources.py' hinzufügen, das Ihr mock' RESOURCES' Wörterbuch enthält. Oder Sie können dieses Modul woanders platzieren und den entsprechenden Pfad zu 'sys.path' voranstellen:' sys.path.insert (0, '/ pfad/zu/resources /') '. –

Antwort

0

So wie ich es zu patch machte das RESOURCE Objekt verwendet:

from default import RESOURCES 
from mock import patch 

with patch.dict(RESOURCES, {'foo': 'bar'}, clear=True): 
    assert(RESOUCES['foo'], 'bar') 

Hinweis, dass Sie das Wörterbuch importieren müssen Sie

in der Testsuite flicken wollen Es ist auch möglich, Verwende die Decorator-Syntax:

from default import RESOURCES 
from mock import patch 

@patch.dict(RESOURCES, {'foo': 'bar'}, clear=True) 
def test(self): 
    self.assert(RESOUCES['foo'], 'bar')