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.
InformationsquelleAutor Marcin | 2009-01-12
Schreibe einen Kommentar