Reinigung einer Datenbank in django vor jeder test-Methode
Standardmäßig, wenn Django läuft gegen sqlite-backend erstellt es eine neue in-memory-Datenbank für einen test. Das bedeutet, dass für jede Klasse, die sich von unittest.TestCase, bekomme ich eine neue Datenbank. Können diese so verändert werden, dass es gelöscht wird vor jeder Testmethode ausgeführt wird?
Beispiel: ich Teste eine manager-Klasse, die bietet zusätzliche Abstraktionsschicht auf der Oberseite von Django persistente Objekte. Der code sieht eher weniger wie, dass
class TestForManager(unittest.TestCase):
def testAddingBlah(self):
manager = Manager()
self.assertEquals(manager.getBlahs(), 0)
manager.addBlah(...)
self.assertEquals(manager.getBlahs(), 1)
def testAddingBlahInDifferentWay(self):
manager = Manager()
self.assertEquals(manager.getBlahs(), 0)
manager.addBlahInDifferentWay(...)
self.assertEquals(manager.getBlahs(), 1)
Nun die ersten Geltendmachung der zweite test schlägt fehl, weil der Zustand der Datenbank erhalten zwischen test-Anrufe und es ist bereits eine Instanz von Blah
in der Datenbank.
- Welche version von django benutzen Sie? Denn alle aktuellen Versionen flush-Datenbank auf jeder test-Methode aufrufen.
- 0.96. Vielleicht lohnt es sich ein Upgrade dann. Ich werde versuchen, dieses heraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie immer, die Lösung ist trivial: verwenden Sie
django.test.TestCase
nichtunittest.TestCase
. Und es funktioniert in allen gängigen Versionen von Django!multi_db=True
zu reinigen alle Datenbanken (falls Sie mehr als eins)Können Sie die
tearDown
Methode. Es wird aufgerufen, nachdem der test ausgeführt wird. Sie können löschen Sie alle Blahs es.setUp
zum einrichten der Datenbank vor dem ausführen des Testcases.Warum nicht die folgenden? Diese leistet, was Sie brauchen, ohne eine wesentliche änderung an Ihrem code.
Bearbeiten. Das "zurücksetzen auf TestCase" - Funktion gibt Ihnen die vollständige Kontrolle.
Viele Prüfverfahren in einem einzigen Testfall sind gut, wenn Sie Testfälle, die sich nicht gegenseitig stören.
Paar test-Methoden in einer einzigen Testfall sind gut, wenn Sie Testfälle, die sich gegenseitig stören.
Können Sie wählen, welches Modell für Ihre tests durch die Gruppierung Ihre test-Methoden in einer oder mehreren TestCases. Sie haben die totale und vollständige Kontrolle.
Für das clearing von non-Standard-Datenbanken, hinzufügen
multi_db = True
in der KlassezB
Machen Sie in zwei verschiedene Funktionen, beide sind keine test-Funktion. Schließlich nennen die abhängige Funktionen test-Funktion.