2009-05-07 24 views

Respuesta

35

Puede simplemente crear una base de datos SQLite en memoria y vincular su sesión a eso.

Ejemplo:


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

¡Gran respuesta! Creo que debes llamar a 'create_all' en el objeto MetaData para crear tablas. Además, si se utilizan tipos de datos específicos del proveedor de db, es posible que algunos de los DDL no se ejecuten. – van

+0

Buenos puntos. Actualicé el ejemplo para mostrar una llamada a create_all. – codeape

+5

Esta es una respuesta horrible si SQLLite no es su base de datos de producción. Nunca pruebe con una base de datos diferente a la que está utilizando en producción. Tendrán muchas diferencias y te estás preparando para un desastre. –

2

Salida del proyecto fixture. Usamos la nariz para probar eso y también es una manera de definir declarativamente los datos para evaluar, ¡habrá algunos ejemplos extensos para que los use allí!

Véase también fixture documentation.