测试使用SQLAlchemy的项目
目录
对使用 SQLAlchemy 连接数据库的项目进行单元测试,直接使用项目的数据库不利于测试,需要测试环境安装相应的数据库,很不方便。 python 集成的 sqlite 可以在内存中构建数据库,正好可以用来进行单元测试。 不过这样就必须考虑不同数据库SQL的兼容问题,无法使用特定数据库的独有 SQL 语句。
构建测试数据库
SQLAlchemy 中使用 sqlite://
表示内存中的 SQLite 数据库。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine("sqlite://")
Session = sessionmaker(bind=self.engine)
session = Session()
Model.metadata.create_all(self.engine)
session.commit()
其中 Model
是整个数据库使用的 Declarative
类。
清空数据库
使用 Model.metadata
清空数据库。
Model.metadata.drop_all(self.engine)
示例
下面是我的一个项目中使用 pytest 做单元测试的示例。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from nwpc_log_model.rdbms_model.models import Model, User
class TestUserTable(object):
def setup_method(self, method):
self.engine = create_engine("sqlite://")
Session = sessionmaker(bind=self.engine)
self.session = Session()
Model.metadata.create_all(self.engine)
self.session.commit()
def teardown_method(self):
Model.metadata.drop_all(self.engine)
def test_user_create(self):
user = User()
user.user_id = 1
user.user_name = "my_user"
self.session.add(user)
self.session.commit()
user_query = self.session.query(User).filter(User.user_id == 1)
query_user = user_query.first()
assert query_user.user_id == 1
assert query_user.user_name == "my_user"