2009-05-07 1 views

Antwort

35

Sie können einfach eine SQLite-In-Memory-Datenbank erstellen und Ihre Sitzung an diese binden.

Beispiel:


from db import session # probably a contextbound sessionmaker 
from db import model 

from sqlalchemy import create_engine 

def setup(): 
    engine = create_engine('sqlite:///:memory:') 
    session.configure(bind=engine) 
    # You probably need to create some tables and 
    # load some test data, do so here. 

    # To create tables, you typically do: 
    model.metadata.create_all(engine) 

def teardown(): 
    session.remove() 


def test_something(): 
    instances = session.query(model.SomeObj).all() 
    eq_(0, len(instances)) 
    session.add(model.SomeObj()) 
    session.flush() 
    # ... 
+1

Große Antwort! Ich denke, Sie müssen 'create_all' für das MetaData-Objekt aufrufen, um tatsächlich Tabellen zu erstellen. Wenn db-vendor-spezifische Datentypen verwendet werden, werden einige der DDLs möglicherweise nicht ausgeführt. – van

+0

Gute Punkte. Ich habe das Beispiel aktualisiert, um einen Aufruf von create_all anzuzeigen. – codeape

+5

Dies ist eine schreckliche Antwort, wenn SQLLite nicht Ihre Produktionsdatenbank ist. Testen Sie niemals mit einer anderen Datenbank als der Datenbank, die Sie in der Produktion verwenden. Sie werden viele Unterschiede haben und Sie bereiten sich auf eine Katastrophe vor. –

2

Schauen Sie sich die fixture Projekt. Wir haben die Nase benutzt, um das zu testen, und es ist auch eine Möglichkeit, Daten deklarativ zu definieren, um sie zu testen. Es wird einige extensive Beispiele geben, die Sie dort verwenden können!

Siehe auch fixture documentation.