【发布时间】:2018-11-10 07:30:22
【问题描述】:
这是我进行链式数据库查询调用的一种方法。
import math
def get_all_keys():
db_session = DBSession()
keys = db_session.query(SomeClass).all()
我应该模拟DBSession().query(SomeClass).all()。我尝试了一些,但没有任何效果。这是我的试验。
@patch('app.modules.somemodule.DBSession')
def test_asd(self, DBSession):
DBSession.execute.query.execute.all.return_value = [1, 2, 3]
self.assertListEqual(DBSession.query('qwe').all(), [1, 2, 3])
在此尝试中,如果我尝试打印DBSession(),我会得到一个看起来不错的MagicMock 对象。但是当我运行pytest 时出现以下错误。
self = <test_some_module.SomeModuleTests testMethod=test_asd>, DBSession = <MagicMock name='DBSession' id='140028663111976'>
@patch('app.modules.somemodule.DBSession')
def test_asd(self, DBSession):
DBSession.execute.query.execute.all.return_value = [1, 2, 3]
print(DBSession().query('qwe').all())
> self.assertListEqual(DBSession.query('qwe').all(), [1, 2, 3])
E AssertionError: First sequence is not a list: <MagicMock name='DBSession.query().all()' id='140028662649184'>
tests/test_some_module.py:21: AssertionError
好像我在嘲笑的时候做错了什么。我的错误是什么?我检查了文档。
【问题讨论】:
标签: python unit-testing sqlalchemy python-unittest python-unittest.mock