Fixtures ist ein Werkzeug, ein Python-Vertrag für wiederverwendbare Zustand / Unterstützungslogik definiert, in erster Linie für Komponententests. & Nbsp; Helper und Anpassung Logik enthalten, um es einfach eigene Vorrichtungen mit Hilfe der Vorrichtungen Vertrag zu schreiben. Glue-Code vorgesehen ist, die mit Geräten, die die Befestigungen Vertrag unittest kompatibel Testfälle einfach und unkompliziert zu erfüllen ist.
Warum Fixtures
Standard-Python unittest.py bietet keine offensichtliche Verfahren zur Herstellung und Wiederverwenden Zustand in einem Testfall außer durch Hinzufügen einer Methode auf der Test-Klasse benötigt. Diese Skalen schlecht - komplexe Hilfsfunktionen Pflanzgut ein Testklassenhierarchie ist ein regelmäßiges Muster, wenn dies geschehen ist. Mocking, während ein großes Werkzeug sich nicht verhindern (und Helfer, um komplexe Dinge können in der gleichen Weise akkumulieren verspotten, wenn auf der Testklasse platziert).
Durch einen einheitlichen Vertrag, wo Helfer haben keine Abhängigkeit von der Testklasse erlauben wir alle regelmäßig Code Hygiene Aktivitäten ohne die verzerrenden Einfluss in einer Klassenhierarchie, die eine ganz andere Sache, die Modellierung ist nehmen definieren - das ist, was Helfern auf einem Testcase leiden an.
Über Fixtures
Ein Fixture stellt einige Zustand. Jedes Gerät verfügt über Attribute darauf, die speziell für die Befestigung sind. Zum Beispiel könnte eine feste Größe, die ein Verzeichnis, das für temporäre Dateien verwendet werden können, haben ein Attribut "Pfad".
Erstellen Fixtures
Minimal, Unterklasse Fixture, Definieren Setup, um Ihren Zustand zu initialisieren und planen Sie eine Bereinigung für Aufräumarbeiten, wenn aufgerufen, und schon sind Sie fertig:
>>> Import unittest
>>> Import Leuchten
>>> Klasse NoddyFixture (fixtures.Fixture):
... Def setUp (self):
... Super (NoddyFixture Selbst) .setUp ()
... Self.frobnozzle = 42
... Self.addCleanup (delattr, selbst, 'FrobNozzle')
Dies wird FrobNozzle initialisieren, wenn Setup aufgerufen wird, und wenn die Bereinigung gecallt des FrobNozzle Attribut zu befreien.
Es gibt einen Helfer zur Anpassung einer Funktion oder Funktionspaar in Fixtures. sie gibt das Ergebnis der Funktion in fn_result:
>>> Import os.path
>>> Import shutil
>>> Import tempfile
>>> Def setup_function ():
... Zurück tempfile.mkdtemp ()
>>> Def teardown_function (Halterung):
... Shutil.rmtree (Halterung)
>>> Befestigung = fixtures.FunctionFixture (setup_function, teardown_function)
>>> Fixture.setUp ()
>>> Print os.path.isdir (fixture.fn_result)
Wahr
>>> Fixture.cleanUp ()
Die Fixture API
Das obige Beispiel stellt einige der Fixture-API. Um in der Lage zu bereinigen nach einer festen Größe verwendet worden sein, alle Geräte definieren eine Bereinigung Methode, die aufgerufen werden soll, wenn ein Scheinwerfer mit beendet.
Denn es ist schön, in der Lage, eine bestimmte Gruppe von verwandten Vorrichtungen im Vorfeld der mit ihnen aufbauen zu können, müssen Vorrichtungen auch festlegen, die Aufstellungsmethode, die, bevor Sie versuchen, sie zu nutzen aufgerufen werden soll.
Ein häufiger Wunsch mit Befestigungen, die teuer zu erstellen, ist, sie in vielen Testfälle wieder verwenden sind; zur Unterstützung dieser die Basis Fixture definiert auch einen Reset die self.cleanUp nennt (); self.setUp (). Befestigungen, die effizienter machen können sich wieder verwendbare sollten diese Methode überschreiben. Dieses kann dann mit mehreren Testzustand über Dinge wie testresources, setUpClass oder Setupmodule verwendet werden.
Bei der Verwendung einer Vorrichtung mit einem Test können Sie manuell die Vorbereitung und Aufräumen Methoden aufrufen. Bequemer ist allerdings die mitgelieferte Klebstoff aus fixtures.TestWithFixtures die eine mixin Definition useFixture bietet (Kamel Fall, weil Unittest ist Camelcase in) Methode verwenden. Es wird setUp auf der Befestigung rufen, rufen self.addCleanup (Vorrichtung), um eine Bereinigung planen, und kehren Sie das Gerät. Auf diese Weise können eine Schreib:
>>> Import Testtools
>>> Import unittest
Beachten Sie, dass wir Testtools Testcase hier müssen wir eine TestCase.addCleanup Verfahren zu gewährleisten.
& Nbsp; >>> Klasse NoddyTest (testtools.TestCase, fixtures.TestWithFixtures):
& Nbsp; ... def test_example (Selbst-):
& Nbsp; ... Befestigung = self.useFixture (NoddyFixture ())
& Nbsp; ... self.assertEqual (42, fixture.frobnozzle)
& Nbsp; >>> result = unittest.TestResult ()
& Nbsp;. >>> _ = NoddyTest ('test_example') ausgeführt (Ergebnis)
& Nbsp; >>> drucken result.wasSuccessful ()
& Nbsp; Wahr
Fixtures Umsetzung der Kontext Protokoll, dh Sie können auch eine Halterung zu verwenden als Kontext-Manager:
>>> Mit fixtures.FunctionFixture (setup_function, teardown_function) als Aufnahme:
... Druck os.path.isdir (fixture.fn_result)
True
Anforderungen :
- Python
Kommentare nicht gefunden