Python 在模拟函数中是否有调用方法的选项?
我有一个方法在里面做一些检查,如果成功,我调用一个方法,如果失败,我调用另一个方法。 在单元测试中,当我使用第三方服务时,我会模仿这个方法。unittest mock中是否有任何选项可以调用mock方法内部的选定方法?抱歉,我的描述可能有点混乱,但我相信代码示例会有所帮助:) 我有多个第三方approves()方法,所以我不能只是模仿这一个来返回True/FalsePython 在模拟函数中是否有调用方法的选项?,python,unit-testing,mocking,python-unittest,Python,Unit Testing,Mocking,Python Unittest,我有一个方法在里面做一些检查,如果成功,我调用一个方法,如果失败,我调用另一个方法。 在单元测试中,当我使用第三方服务时,我会模仿这个方法。unittest mock中是否有任何选项可以调用mock方法内部的选定方法?抱歉,我的描述可能有点混乱,但我相信代码示例会有所帮助:) 我有多个第三方approves()方法,所以我不能只是模仿这一个来返回True/False def fun(self): if 3rd_party_approves(): # Http request insid
def fun(self):
if 3rd_party_approves(): # Http request inside that I want to avoid in tests
self.approve()
else:
self.reject()
我希望能够在单元测试中调用reject()或approve方法,而无需在第三方approve()方法中发出HTTP请求一种方法是为第三方approve()制作类方法包装器 并用它来嘲弄它 面片对象
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()
您有几个第三方方法与此有什么关系
fun()
只调用了其中一个,为什么还要关心其他的呢?
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()