Frage

Ich mache jetzt Komponententests für bereits vorhandenen Code. Ich stand vor dem nächste Problem:

Nach syncdb läuft für Testdatenbank erstellen, Django füllt automatisch mehrere Tabellen wie django_content_type oder auth_permissions.

Dann stelle ich brauche einen komplexen Test auszuführen, wie überprüfen Sie die Benutzer-Registrierung, dass ein lof ot Datentabellen und Verbindungen zwischen ihnen benötigen.

Wenn ich werde versuchen, meine ganze vorhandene Datenbank zu verwenden für die Lampen zu machen (das eher für mich Convinient würde) - Ich werde den Fehler wie hier . Dies geschieht, weil, Django bereits Tabellen wie django_content_type gefüllt.

Der nächste mögliche Weg ist django DumpData --exclude Option zu verwenden, um bereits mit syncdb Tabellen gefüllt. Aber das funktioniert nicht gut auch, denn wenn ich nehme Benutzer- und Benutzergruppenobjekte aus meiner db und Benutzerberechtigungen Tabelle, die automatisch von syncdb erstellt wurde, kann ich eine Fehlermeldung erhalten, weil der Primärschlüssel, verbinden sie nun weist falsch. Dies wird besser beschrieben hier teil ‚Leuchte Hölle‘, aber die dort gezeigte Lösung doensn't gut aussehen)

Das nächste mögliche Schema ich sehe, ist nächstes:

  1. Ich bin mit meinen Tests; Django erstellt Testdatenbank, macht syncdb und erstellt alle diese Tabellen.
  2. In meinem Test-Setup ich bin Fallenlassen dieser Datenbank, die neue leere Datenbank.
  3. Laden Datendump aus bestehenden Datenbank auch in Testaufbau
War es hilfreich?

Lösung

Das ist, wie das Problem gelöst wurde:

Nach der syncdb hat die Testdatenbank erstellt, in setUp Teil der Tests, die ich os.system den Zugriff auf Shell von meinem Code verwenden. Dann bin ich nur den Dump der Datenbank geladen, die ich für Tests verwendet werden soll.

So Dies funktioniert wie folgt: syncdb Füllungen CONTENT und einigen anderen Tabellen mit Daten. Dann in setUp von Tests Teil des SQL-Dump laden alle löscht die vorher Daten erstellt und ich bekomme eine nette Datenbank.

Auch nicht die beste Lösung sein, aber es funktioniert =)

Andere Tipps

Mein Ansatz zum ersten Einsatz Süd wäre DB Migrationen einfach zu machen (was nicht hilft überhaupt, aber es ist schön), und dann ein Modul von Modellerstellungsmethoden verwenden.

Beim Ausführen

  $  manage.py test my_proj

Django mit Süd installiert mit dem Test-DB zu erstellen, und führen Sie alle Ihre Wanderungen, um Ihnen einen vollständig aktualisierten Test db.

Um Schreibtests, erstellen Sie zunächst ein Python-Modul calle, test_model_factory.py Hier drin Funktionen erstellen, die Ihre Objekte zu erstellen.

def mk_user():
   User.objects.create(...)

Dann in Ihren Tests können Sie Ihren test_model_factory Modul importieren und Erstellen von Objekten für jeden Test.

  def test_something(self):
     test_user = test_model_factory.mk_user()

     self.assert(test_user ...)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top