【发布时间】:2014-04-30 17:48:00
【问题描述】:
我正在使用带有 SQLAlchemy 的夹具来创建一些集成测试。
我想将 SQLAlchemy 设置为“从不提交”模式,以防止将更改写入数据库,从而使我的测试彼此完全隔离。有没有办法做到这一点?
我最初的想法是,也许我可以用模拟对象替换Session.commit;但是我不确定是否还有其他可能具有相同效果的事情,如果我要走那条路,我也需要模拟。
【问题讨论】:
-
你确定你需要这个吗?内存中的 sqlite 数据库能否满足您的需求?
-
@IfLoop 是的,我需要这个。不,内存中的 sqlite 在这里没有帮助,也没有租赁,因为我们的数据库模式与使用 DB2 非常相关。
-
@Marcin 考虑另一种方法 - 使用
setup和teardown进行清理。否则,您将依赖测试代码的行为,这可能会出错。 -
在其他事务模型中,我将其视为
transaction.doom(),例如在ZODB 或pyramid_tm。看了sqlalchemy.engine.Transaction,觉得不支持。 -
@JanVlcinsky 是的,但是
session.rollback()在我的测试中没有任何效果。我当然愿意接受任何可以为每个测试提供完全隔离的方法,但它必须通过(或通过颠覆)sqlalchemy 来实现。
标签: python testing sqlalchemy