如何在python中修补不同文件中的requests.get

如何在python中修补不同文件中的requests.get,python,unit-testing,mocking,patch,Python,Unit Testing,Mocking,Patch,我有2个python文件:1个用于单元测试(tests.py),1个用于我要测试的脚本(main.py): - 我想修补请求。get返回测试响应,但修补不起作用,因为它试图发送请求/连接到提供的url。我认为补丁名requests.get并不像一些人在网上提到的那样,针对main.py中使用它的地方(因为它指的是定义它的地方)。但在这种情况下,我不知道如何解决这个问题 如果main.py中正在使用导入请求,那么如何从另一个文件对其进行修补?谢谢。发现我需要在创建修补程序的调用结束时添加.star

我有2个python文件:1个用于单元测试(tests.py),1个用于我要测试的脚本(main.py):

-

我想修补
请求。get
返回
测试响应
,但修补不起作用,因为它试图发送请求/连接到提供的url。我认为补丁名
requests.get
并不像一些人在网上提到的那样,针对main.py中使用它的地方(因为它指的是定义它的地方)。但在这种情况下,我不知道如何解决这个问题


如果main.py中正在使用
导入请求
,那么如何从另一个文件对其进行修补?谢谢。

发现我需要在创建修补程序的调用结束时添加
.start()

# setup mocks
patch('requests.get', mock.Mock(side_effect=some_handler).start()
如果这个解决方案有任何问题,或者有更好的处理方法,我很乐意听到

  • Mockget\u response而不是Mock请求。get(模拟内置函数;对于这样一个简单的用例,在python中不需要模拟这些函数)
  • 将模拟get\u response函数的返回值设置为“test\u response”
  • 在tests.py中
    # In tests.py
    
    from unittest import mock
    from unittest.mock import patch
    from my_project.main import get_response
    
    def some_handler(url):
        return "test_response"
    
    class GetResponseTestCase(unittest.TestCase):
    
        def setUp(self):
    
            # setup mocks
            patch('requests.get', mock.Mock(side_effect=some_handler)
    
        def run_test(self):
    
            result = get_response("test_response")
    
    # setup mocks
    patch('requests.get', mock.Mock(side_effect=some_handler).start()
    
    from unittest import mock
    
    class GetResponseTestCase(unittest.TestCase):
    
        @mock.patch("my_project.main.get_response") ##mocking get_response
        def run_test(self, mocked_get_response):
            mocked_get_response.return_value = "test_response" ## setting return value