Can';python上的t monkeypatch函数+;皮特斯特

Can';python上的t monkeypatch函数+;皮特斯特,python,testing,mocking,pytest,monkeypatching,Python,Testing,Mocking,Pytest,Monkeypatching,我需要在我正在为之编写测试的项目上修补一些函数,但在此之前,我创建了一个简单的项目来尝试它(它基本上使用requests.get调用ipify API来获取我的公共IP,我正在尝试对requests.get函数或调用requests.get的我自己的代码上的函数进行修补,以便返回一个固定值,在本例中为“0.0.0”) 项目结构如下所示: 根目录 ipify_api(我的软件包) py(这里有一个函数,返回API返回的公共IP) py(这里有一个调用API并返回响应的函数) 测验 tes

我需要在我正在为之编写测试的项目上修补一些函数,但在此之前,我创建了一个简单的项目来尝试它(它基本上使用requests.get调用ipify API来获取我的公共IP,我正在尝试对requests.get函数或调用requests.get的我自己的代码上的函数进行修补,以便返回一个固定值,在本例中为“0.0.0”)

项目结构如下所示:

  • 根目录
    • ipify_api(我的软件包)
      • py(这里有一个函数,返回API返回的公共IP)
      • py(这里有一个调用API并返回响应的函数)
    • 测验
      • test_ipify.py
项目代码如下所示:

ipify\u api/helpers.py

从请求导入获取
def请求_ipify_api():
r=get(“https://api.ipify.org/?format=raw")
返回r
ipify\u api/methods.py

from.helpers导入*
def get_public_ip()->str:
r=请求\u ipify\u api()
返回r.text
测试/test\u ipify.py

导入请求
导入ipify_api
#导入ipify_api.helpers
类伪造责任:
文本:str
类TestIpifyAPI:
@静力学方法
def _获取伪响应():
r=FakerResponse()
r、 text=“0.0.0.0”
返回r
def测试\u获取\u公共\u ip(自身,monkeypatch):
“”“调用方法。get\u public\u ip()应返回0.0.0.0
"""
#setattr(ipify\u api.helpers,“请求ipify\u api”,self.\u获取\u伪\u响应)
setattr(请求,“获取”,self.\u获取\u伪造\u响应)
断言ipify_api.get_public_ip()=“0.0.0.0”
问题是实函数一直被调用,所以我没有得到预期的“0.0.0.0”结果,而是得到了我的实IP(因为调用了real requests.get get)。修补我自己的ipify_api.helpers.request_ipify_api()函数会得到同样的结果


据我所知,我正在做pytest文档中关于monkey补丁函数的说明:

在您使用它的地方进行补丁,而不是从哪里来。在您的情况下,您必须修补
ipify.get
,而不是
请求。get
@KlausD。就是这样,现在可以按预期工作了,谢谢!