为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Python Mock 副作用根据被模拟的函数返回不同的值

如何使用 Python Mock 副作用根据被模拟的函数返回不同的值

慕姐8265434 2021-12-16 15:12:19
我有一个通用函数,我想将其用作两个不同函数的副作用。根据被模拟的函数,它们应该返回不同的值。代码是:def sleep_three(*args, **kwargs):    logging.info('Sleeping 3 seconds')    time.sleep(3)用作两个不同功能的副作用: self.foo.side_effect = sleep_three self.bar.side_effect = sleep_three对于 foo,我想要一个特定的返回值,而对于 bar,我想要一个不同的返回值。我知道如何根据传递给 side_effect 函数的不同参数获得不同的返回值。在这种情况下,尽管 foo 和 bar 都在同一个参数中传递,但它们只需要返回不同的值。我的选择是:为 side_effect 编写两个不同的函数: sleep_three_foo 和 sleep_three_bar 然后相应地匹配返回值。但这违反了 DRY 原则,我想避免它。我的问题是:在 sleep_three 中有没有办法获得被模拟的原始函数?就像是if original_mocked_function == foo:    return aelif original_mocked_function == bar:    return b任何指针表示赞赏!
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

定义一个函数,该函数将副作用函数的所需返回值作为参数并返回适当的函数。


def make_sleeper(rv):

    def _(*args, **kwargs):

        logging.info("Sleeping 3 seconds")

        time.sleep(3)

        return rv

    return _


self.foo.side_effect = make_sleeper(5)

self.bar.side_effect = make_sleeper(9)


查看完整回答
反对 回复 2021-12-16
  • 1 回答
  • 0 关注
  • 290 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号