我有一个功能:
def payment(self):
#some logic ...
#more logic ...
stripe.Event.create(...)
# logic
#...
如何使用patch
编写测试以测试对外部API(例如stripe.Event.create
)的请求,而无需从我的主函数转移该函数调用?
我设法通过如下重写功能来对其进行测试:
def get_api_result():
stripe.Event.create(...)
def payment(self):
#some logic ...
#more logic ...
res = get_api_result()
# logic
#...
并使用mock
:
import mock
@mock.patch('get_api_result')
def test_payment(self, mockEvent) -> None:
#...
mockEvent.return_value = obj
但是我不喜欢这种方法。我不得不添加另一个函数来模拟它似乎并不正确。
您应该可以直接修补stripe.Event.create
。只要确保patch it where it's used:
patch()
通过(暂时)将name指向的对象更改为另一个对象来工作。可以有许多名称指向任何单个对象,因此要使修补程序起作用,必须确保对被测系统使用的名称进行修补。基本原理是,您修补对象向上看的位置,该位置不一定与定义的位置相同。
例如,类似这样的方法应该起作用:
patch()
我鼓励您阅读上面引用的整个部分。