在模拟函数中是否有调用方法的选项?

2024-09-30 08:22:09 发布

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

我有一个方法在里面做一些检查,如果成功我调用一个方法,如果失败我调用另一个方法。 在单元测试中,当我使用第三方服务时,我嘲笑这个方法。unittest mock中是否有任何选项可以调用mock方法内部的选定方法?抱歉,我的描述可能有点混乱,但我相信代码示例会有所帮助:) 我有多个第三方\u approves()方法,所以我不能模拟这个方法来返回True/False

def fun(self):
    if 3rd_party_approves():  # Http request inside that I want to avoid in tests
        self.approve()
    else:
        self.reject()

我希望能够在单元测试中调用reject()或approve方法,而无需在第三方approves()方法中发出HTTP请求


Tags: 方法代码selffalsetrue示例def选项
1条回答
网友
1楼 · 发布于 2024-09-30 08:22:09

一种方法是为3rd_party_approves()制作类方法包装器

class ProductionClass():
...
    def wrapper_for_3rd_party_approves(self):
        return 3rd_party_approves()

并用 补丁对象

from unittest.mock import patch

with patch.object(ProductionClass, 'wrapper_for_3rd_party_approves', return_value=True):
    ProductionClass().fun() #will allow 3rd_party_approves and call self.approve()

with patch.object(ProductionClass, 'wrapper_for_3rd_party_approves', return_value=False):
    ProductionClass().fun() #will not allow 3rd_party_approves and call self.reject()

相关问题 更多 >

    热门问题