Ich habe derzeit einen unittest.TestCase, der aussieht wie ..
%Vor% Das funktioniert gut, aber der Aufruf von Trailers()
dauert etwa 2 Sekunden. Da setUp()
aufgerufen wird, bevor jeder Test ausgeführt wird, dauern die Tests jetzt fast 10 Sekunden (mit nur 3 Testfunktionen)
Wie wird die Variable self.all_trailers
zwischen Tests korrekt zwischengespeichert?
Entfernen Sie die Setup-Funktion und machen Sie ..
%Vor%.. funktioniert, aber dann behauptet es "lief 3 Tests in 0.000s" was falsch ist. Die einzige andere Möglichkeit, die mir einfällt, ist die globale Variable cache_trailers (die zwar richtig funktioniert, aber ziemlich schrecklich ist):
%Vor%Eine Alternative zu der vorgeschlagenen Lösung wäre die Verwendung eines besser ausgestatteten Testlaufers wie Nase . Mit Nase können Sie Setup-Funktionen auf Modulebene haben, die einmal für ein Testmodul ausgeführt werden. Da es vollständig kompatibel mit Unittest ist, müssten Sie keinen Code ändern.
Aus dem Handbuch zur Nase:
Nase unterstützt Leuchten an der Verpackung, Modul-, Klassen- und Testfallebene so teure Initialisierung kann durchgeführt werden so selten wie möglich .
Fixtures sind hier im Detail beschrieben . Neben der Erfüllung Ihres Anwendungsfalles kann ich es natürlich auch als allgemeines Testwerkzeug empfehlen. Keines meiner Projekte wird ohne es verlassen.
Wenn Sie Python & gt; = 2.7 verwenden, können Sie die setUpClass
Methode, die nur einmal für den gesamten Komponententest aufgerufen wird.
Was macht die Klasse Trailers?
Wenn es einen Zustand enthält, müssen Sie setzen, um jedes Mal, wenn der Unit-Test ausgeführt wird, zurückzusetzen.
Um Ihr Problem zu lösen, würde ich ein Mock-Objekt verwenden - indem ich nur die Schnittstelle von Trailers nachbilde, die gefälschte Daten liefert.
Aktualisieren : Da Trailers nur XML-Daten liest, würde ich nach einer Lösung wie der von cdleary vorgeschlagenen suchen.
Es ist erwähnenswert, dass der in der Zope / Plone-Welt verwendete Testrunner im Jahr 2010 als separates Modul veröffentlicht wurde, was nicht überraschend zope heißt .Testrunner . Es unterstützt Caching setUps in Form von "Layers". Schau es dir an.
Tags und Links python unit-testing