dingus ist ein bisschen wie ein Mock-Objekt. Der wichtigste Unterschied ist, dass Sie nicht auf die Erwartungen vor der Zeit. Sie haben den Code laufen einfach, mit ein dingus anstelle von einem anderen Objekt oder die Klasse, und es wird aufgezeichnet, was passiert, um es. Dann, wenn Ihr Code ausgeübt wurde, können Aussagen über das, was sie an die dingus tat machen.
Eine neue dingus vom Dingus Klasse erstellt. Sie können dinguses Namen, die mit Debugging Ihrer Tests hilft, vor allem, wenn es mehrere dinguses im Spiel geben.
& Nbsp; >>> von dingus importieren Dingus
& Nbsp; >>> d = Dingus ('root')
& Nbsp; d >>>
& Nbsp;
Zugriff auf alle Attribute eines dingus wird eine neue dingus zurückzukehren.
& Nbsp; >>> d.something
& Nbsp;
Es gibt ein paar Ausnahmen für spezielle dingus Methoden. Wir werden einige ein wenig zu sehen.
Ein dingus kann auch wie eine Funktion oder Methode aufgerufen werden. Es kümmert sich nicht darum, wie viele Argumente Sie ihm geben, oder was diese Argumente. Anrufe an eine dingus wird immer das gleiche Objekt zurück, unabhängig von den Argumenten.
& Nbsp; >>> d ()
& Nbsp;
& Nbsp; >>> d ("Argument")
& Nbsp;
& Nbsp; >>> d (55)
& Nbsp;
AUFNAHME und Behauptungen
Zu jeder Zeit können wir eine Liste der Anrufe, die an einem dingus vorgenommen wurden, zu erhalten. Jeder Eintrag in der Anrufliste enthält:
& Nbsp; * der Name der Methode genannt (oder "()", wenn die dingus selbst genannt wurde)
& Nbsp; * Die Argumente, oder (), wenn keine
& Nbsp; * dem Schlüsselwort argumnets, oder {}, wenn keine
& Nbsp; * Der Wert, der an den Aufrufer zurückgegeben wurde
Hier ist eine Liste der Anrufe, die wir bisher gemacht haben, um d:
& Nbsp; >>> von pprint Import pprint
& Nbsp; >>> pprint (d.calls)
& Nbsp; [('()', (), {},
& Nbsp; ('()', ("Argument",), {},
& Nbsp; ('()', (55,), {},
Sie können Anrufe mit Namen, Argumente und Schlüsselwortargumente zu filtern:
& Nbsp; >>> pprint (d.calls ('()', 55))
& Nbsp; [('()', (55,), {},
Wenn Sie kein Interesse daran zu Wert eines bestimmten Argument, können Sie den Wert DONTCARE beim Filtern verwenden:
& Nbsp; >>> von dingus importieren DONTCARE
& Nbsp; >>> pprint (d.calls ('()', DONTCARE))
& Nbsp; [('()', ("Argument",), {},
& Nbsp; ('()', (55,), {},
Dinguses kann mehr als nur Attribute abgerufen und aufgerufen werden zu tun. Sie unterstützen viele Python-Operatoren. Ziel ist es, zu ermöglichen, und notieren Sie, eine Wechselwirkung:
& Nbsp; >>> d = Dingus ('root')
& Nbsp; >>> (2 ** d.something) ['Hallo'] () / 100 * 'foo'
& Nbsp;
(Hoffentlich ist Ihr realen dingus Aufnahmen werden nicht wie diese!)
Patchen
Dingus bietet ein Kontextmanager bei Tests Patchen Objekte. Zum Beispiel:
& Nbsp; >>> von dingus Import Patch
& Nbsp; >>> import urllib2
& Nbsp; >>> mit Patch ('urllib2.urlopen'):
& Nbsp; ... Druck urllib2.urlopen .__ class__
& Nbsp;
& Nbsp; >>> print urllib2.urlopen .__ class__
& Nbsp;
Sie können dies auch nutzen als Dekorateur in Ihrem Testmethoden:
& Nbsp; >>>patch ('urllib2.urlopen')
& Nbsp; ... def test_something (Selbst-):
& Nbsp; ... Pass
& Nbsp; ...
DANGEROUS MAGIC
Dingus kann auch automatisch Globals eines Moduls zu ersetzen, wenn die Ausführung von Tests. Dies ermöglicht Ihnen, vollständig isoliert Unit-Tests zu schreiben. Siehe Beispiele / urllib2 / test_urllib2.py für ein Beispiel. Der Autor empfiehlt, nicht mehr diese Funktion, da es sehr spröde Tests zu unterstützen. Sie sollten den Schmerz der Hand verspottet Abhängigkeiten zu fühlen; . der Schmerz wird Ihnen sagen, wenn eine Klasse arbeitet mit zu vielen anderen
Anforderungen :
- Python
Kommentare nicht gefunden