【问题标题】:I need a sample of python unit testing sqlalchemy model with nose我需要一个带有鼻子的python单元测试sqlalchemy模型的样本
【发布时间】:2010-10-24 10:25:00
【问题描述】:

谁能告诉我如何为我使用鼻子创建的 sqlalchemy 模型编写单元测试。

我只需要一个简单的例子。

谢谢。

【问题讨论】:

  • 更具体:您在如何设置鼻子方面需要帮助吗?或者如何测试模型?

标签: python unit-testing testing sqlalchemy nose


【解决方案1】:

您可以简单地创建一个内存中的 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()
    # ...

【讨论】:

  • 很好的答案!我认为您需要在 MetaData 对象上调用 create_all 才能实际创建表。此外,如果使用 db-vendor 特定的数据类型,则某些 DDL 可能无法运行。
  • 好点。我更新了示例以显示对 create_all 的调用。
  • 如果 SQLLite 不是您的生产数据库,这是一个可怕的答案。切勿使用与您在生产中使用的数据库不同的数据库进行测试。他们会有很多不同,你正在为一场灾难做好准备。
  • 您当然可以使用 Postgresql、MySQL 等数据库服务器来执行测试。上面的 setup 和 teardown 方法可能会有点不同,你可能会在 setup 中执行 CREATE DATABASE,在 teardown 中执行 DROP DATABASE。通过使用 SQLAlchemy 切换数据库后端,我很少遇到任何问题。我经常对 SQLite 进行自动测试,并在 Postg、MySQL 或 MSSQL 上运行 prod 系统。我开发的一个系统,我们对 SQLite 进行了单元测试,在 Linux/Postgres 上进行了集成测试,生产系统是 Win/MSSQL。数据库访问代码没有变化。
【解决方案2】:

查看fixture 项目。我们使用鼻子来测试它,它也是一种以声明方式定义要测试的数据的方法,那里会有一些广泛的示例供您使用!

另见fixture documentation

【讨论】:

    猜你喜欢
    • 2011-06-10
    • 2018-11-24
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多