2009-05-07 10 views

Odpowiedz

35

Możesz po prostu utworzyć bazę danych SQLite w pamięci i powiązać z nią sesję.

Przykład:


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

Świetna odpowiedź! Myślę, że musisz wywołać 'create_all' na obiekcie MetaData, aby faktycznie tworzyć tabele. Ponadto, jeśli używane są typy danych specyficzne dla dostawcy bazy danych, niektóre z tych DDL mogą nie działać. – van

+0

Dobre punkty. Zaktualizowałem przykład, aby wyświetlić wywołanie create_all. – codeape

+5

To jest straszna odpowiedź, jeśli SQLLite nie jest Twoją produkcyjną bazą danych. Nigdy nie testuj z inną bazą danych niż ta, której używasz do produkcji. Będą mieć wiele różnic i podejmujesz się katastrofy. –

2

Zapoznaj się z projektem fixture. Użyliśmy nosa, aby to przetestować, i jest to również sposób na deklaratywne zdefiniowanie danych do przetestowania, będzie kilka przykładów do wykorzystania!

Zobacz także fixture documentation.