了解嘲笑和副作用

2024-05-15 17:33:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个Python新手,我了解测试,但是,我不能在处理模拟对象和副作用上绞尽脑汁。在

我的方法是:

@retry(every=RETRY_EVERY, until=RETRY_UNTIL)
@unique()
@sessionized(0)
def record_click(session, queue, mailing_id, member_id, link_id, timestamp, user_agent):
    message = session.query(Message).get((mailing_id, member_id))
    mailing = session.query(Mailing).get(mailing_id)
    # More code here

这是我的测试:

^{pr2}$

我一直收到的错误是:

而不是
call().publish_link_clicked(group_ids=[111], account_id=77, **etc)

这就是UnitTest中所称的
call().publish_link_clicked(group_ids=<MagicMock name='Session().query().get().recipient_groups' id='4557662736'>, account_id=<MagicMock name='Session().query().get().account_id' id='4557652048'>, **etc)

我做错什么了?在


Tags: ididsgetsessiongroupetclinkaccount
1条回答
网友
1楼 · 发布于 2024-05-15 17:33:43

不要调用Session()query();使用^{} attribute来遍历调用图:

Session.return_value.query.return_value.side_effect = lambda arg: message_mock if isinstance(arg, tuple) else mailing_mock

我通常使用中介名称来保存返回值:

^{pr2}$

您还需要修补右Session类;这完全取决于代码如何将session参数生成为record_click。有关详细信息,请参见Where to Patch。如果@sessionized修饰符产生了这个参数,并且它不在audience.jobs模块中,那么您没有修补正确的位置。在

相关问题 更多 >