2009-05-07 3 views

답변

35

메모리 내 SQLite 데이터베이스를 만들고 세션을 바인딩 할 수 있습니다.

예 :


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

좋은 답변입니다! 실제로 테이블을 만들려면 MetaData 객체에서'create_all'을 호출해야한다고 생각합니다. 또한 db-vendor 특정 데이터 유형이 사용되는 경우 일부 DDL이 실행되지 않을 수 있습니다. – van

+0

좋은 지적. create_all에 대한 호출을 보여주기 위해 예제를 업데이트했다. – codeape

+5

SQLLite가 프로덕션 데이터베이스가 아닌 경우 이것은 끔찍한 대답입니다. 프로덕션 환경에서 사용중인 것과 다른 데이터베이스로 테스트하지 마십시오. 그들은 많은 차이가있을 것이고 당신은 재앙을 위해 스스로를 준비하고 있습니다. –

2

체크 아웃 fixture 프로젝트. 우리는 그것을 테스트하기 위해 코를 사용했으며 테스트 할 데이터를 선언적으로 정의하는 방법이기도합니다. 거기에 사용할 수있는 광범위한 예제가 있습니다!

도 참조하십시오. fixture documentation.

관련 문제