2009-07-29 12 views
5

Ich versuche, die Integration in meine Django-Anwendung von Subversion bis zum Post-Commit-Hook.kann keine Datensätze von Django Testfall eingefügt

Ich habe einen Django-Testfall (eine Unterklasse von unittest.TestCase), der (a) ein paar Datensätze in eine Tabelle einfügt, (b) einen svn-Commit erzeugt, (c) svn commit einen Haken ausführt, der my verwendet Django-Modell zum Nachschlagen von Informationen.

Ich benutze eine SQLite3 db. Der Test ist nicht mit dem: Speicher: db, es ist eine echte Datei verwenden. Ich habe den Django-Test-Code geändert (um dieses Problem zu beheben), um zu vermeiden, dass die Test-DB gelöscht wird, wenn sie fertig ist, damit ich sie untersuchen kann.

Der Testcode dumps model.MyModel.objects.all() und die Datensätze gibt es zwischen (a) und (b).

Wenn der Haken bei (c) ausgelöst wird, wird auch das Modell ausgegeben, und es gibt keine Datensätze. Wenn ich die Datenbank nach den Testläufen manuell überprüfe, gibt es keine Datensätze.

Ist im Django-Testframework etwas los, das die Datensätze nicht in die db-Datei schreibt?

Zur Klarstellung: (d) Beenden Sie den Testfall. Daher wird der svn-Commit-Hook ausgeführt, bevor der Testfall beendet wird, und bevor irgendein Django-DB-Bereinigungscode sollte ausgeführt werden.

Zusätzliche Informationen: Ich habe eine Verzögerung von 15 Sekunden zwischen (b) und (b) so, dass ich die db-Datei in der Mitte des Tests manuell prüfen konnte. Die Datensätze befinden sich nicht in der Datei.

Antwort

5

Verwenden Sie Django Trunk? Letzte Änderungen (Changeset 9756) führen Tests in einer Transaktion durch, die dann zurückgesetzt wird. Hier ist der Check-in-Kommentar:

Fixe # 8138 - Änderungen django.test.TestCase Tests Rollback (wenn die Datenbank unterstützt) statt Spülung und Neuladen der Datenbank. Dies kann im Wesentlichen die Zeit reduzieren, die es dauert, große Testsuites zu laufen.

+0

Vinay, danke. Ich habe diesen Code in meinem Baum. Ich habe die Transaktionsunterstützung auf "False" gezwungen und jetzt wird der Test bestanden. – bstpierre

+0

@bstpierre, wie haben Sie Transaktion Unterstützung auf False gezwungen? – Greg

+0

@Greg vom Aussehen des Changeset Ich habe wahrscheinlich 'TransactionTestCase' anstelle von' TestCase' verwendet, aber es ist eine faire Wette, dass sich einiges davon in den letzten 7 Jahren geändert haben könnte, also ymmv – bstpierre

0

Das Testframework speichert die Daten nicht in der Datenbank, die Daten werden nach Abschluss der Tests bereinigt.

Verwandte Themen