2009-05-07 5 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も参照してください。

関連する問題