python链式函数_Python模拟链式函数调用

我在单元测试中的一个方法中有以下语句。db_employees = self.db._session.query(Employee).filter(Employee.dept ==

new_employee.dept).all()

我想让德银员工拿到模拟员工名单。我试图通过以下方式实现这一目标:m = MagickMock()

m.return_value.filter().all().return_value = employees

其中employees是employee对象的列表。但这没用。当我试图打印任何属性的值时,它有一个模拟值。这就是代码的外观:class Database(object):

def __init__(self, user=None, passwd=None, db="sqlite:tmp/emp.db"):

try:

engine = create_engine(db)

except Exception:

raise ValueError("Database '%s' does not exist." % db)

def on_connect(conn, record):

conn.execute('pragma foreign_keys=ON')

if 'sqlite://' in db:

event.listen(engine, 'connect', on_connect)

Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)

self._session = DBSession()

class TestEmployee(MyEmployee):

def setUp(self):

self.db = emp.database.Database(db=options.connection)

self.db._session._autoflush()

@mock.patch.object(session.Session, 'add')

@mock.patch.object(session.Session, 'query')

def test_update(self, mock_query, mock_add):

employees = [{'id': 1,

'name': 'Pradeep',

'department': 'IT',

'manager': 'John'}]

mock_add.side_effect = self.add_side_effect

mock_query.return_value = self.query_results()

self.update_employees(employees)

def add_side_effect(self, instance, _warn=True):

// Code to mock add

// Values will be stored in a dict which will be used to

// check with expected value.

def query_results(self):

m = MagicMock()

if self.count == 0:

m.return_value.filter.return_value.all.return_value = [employee]

elif:

m.return_value.filter.return_value.all.return_value = [department]

return m

我将查询结果作为测试调用查询两次的方法。首先是employee表,然后是department表。

如何模拟此链接函数调用?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值