Benutzerdefinierte SQLite-Datenbank für Komponententests für Code mit peewee ORM

9

Ich versuche, ein Viele-zu-Viele-Szenario mit peewee python ORM zu implementieren, und ich möchte einige Komponententests. Peewee tutorial ist großartig, aber es geht davon aus, dass die Datenbank auf Modulebene definiert ist, dann verwenden alle Modelle es. Meine Situation ist anders: Ich habe keine Quellcodedatei (ein Modul aus Pythons Sicht) mit Tests, die ich explizit ausführe, ich benutze nose, die Tests aus dieser Datei sammelt und sie ausführt.

Wie verwende ich eine benutzerdefinierte Datenbank nur für Modelle instanziiert in Tests (die von Nase ausgeführt werden)? Mein Ziel ist es, eine In-Memory-Datenbank nur für Tests zu verwenden, um den Testprozess zu beschleunigen.

    
AnonymousLurker 13.04.2013, 00:22
quelle

4 Antworten

12

Ich habe heute ein Commit gemacht, das macht das einfacher.

Das Update hat die Form eines Kontextmanagers, mit dem Sie die Datenbank eines Modells überschreiben können:

%Vor%

Lesen Sie die Dokumentation und werfen Sie einen Blick auf die Beispiel-Testfälle :

coleifer 14.04.2013, 16:25
quelle
6

Um den Kontextmanager nicht in jeden Testfall aufzunehmen, überschreiben Sie run method.

%Vor%     
avalanchy 01.04.2014 14:35
quelle
5

Ich habe die großartigen Antworten von @colifer und @avalanchy genommen und einen Schritt weiter gegangen.

Um zu vermeiden, dass die run-Methode für jede TestCase -Unterklasse überschrieben wird, können Sie eine Basisklasse verwenden ... und ich mag auch die Idee, nicht jede Modellklasse I aufschreiben zu müssen arbeiten mit, so kam ich mit diesem

%Vor%

Also, jetzt kann ich einfach von TestCaseWithPeewee erben und muss mich um nichts anderes als den Test kümmern

    
g3rv4 17.09.2014 15:37
quelle
0

Bei der Verwendung von test_database sind Probleme aufgetreten, weil test_db nicht initialisiert wurde:

nose.proxy.Exception: Error, database not properly initialized before opening connection -------------------- >> begin captured logging << -------------------- peewee: DEBUG: ('SELECT "t1"."id", "t1"."name", "t1"."count" FROM "counter" AS t1', []) --------------------- >> end captured logging << ---------------------

Ich habe das schließlich behoben, indem ich create_tables=True like so übergeben habe:

def test_timeline(self): with test_database(test_db, (User, Tweet), create_tables=True): # This data will be created in 'test_db' self.create_test_data()

Nach sollten die Dokumente create_tables standardmäßig auf% gesetzt werden co_de%, aber das scheint in der neuesten Version von True nicht der Fall zu sein.

    
amorphic 26.10.2015 13:17
quelle

Tags und Links