2009-05-07 4 views
22

Может кто-нибудь покажет мне, как писать модульные тесты для модели sqlalchemy, которую я создал с использованием носа.Мне нужен образец тестирования модуля python sqlalchemy с носом

Мне просто нужен простой пример.

Спасибо.

+3

Конкретно: вам нужна помощь в настройке носа? или как проверить модель? – van

ответ

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

Отличный ответ! Я думаю, вам нужно вызвать 'create_all' в объекте MetaData для создания таблиц. Кроме того, если используются типы данных, специфичные для db-vendor, тогда некоторые из DDL могут не работать. – van

+0

Хорошие очки. Я обновил пример, чтобы показать вызов create_all. – codeape

+5

Это ужасный ответ, если SQLLite не является вашей производственной базой данных. Никогда не тестируйте другую базу данных, чем та, которую вы используете на производстве. У них будет много разногласий, и вы настроитесь на катастрофу. –

2

Заканчивать проект fixture. Мы использовали нос, чтобы проверить это, и это также способ декларативно определить данные для тестирования против, там будут некоторые обширные примеры для вас там!

См. Также fixture documentation.

Смежные вопросы