我有2个python文件:1个用于单元测试(tests.py),1个用于我要测试的脚本(main.py):
# In main.py:
import requests
def get_response(url):
response = requests.get(url);
# Do stuff...
return response
-
# 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")
我想修补requests.get
以返回test_response
,但是修补无法正常工作,因为它试图发送请求/与所提供的URL建立连接。我认为补丁名称requests.get
并不针对它在main.py中使用的位置(因为它是指它的定义位置),正如一些人在网上提到的那样。但是在这种情况下,我不确定如何解决此问题。
如果main.py中使用了import requests
,那么如何从另一个文件中对其进行修补?谢谢。
答案 0 :(得分:1)
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
答案 1 :(得分:0)
发现在创建补丁的调用结束时需要添加.start()
:
# setup mocks
patch('requests.get', mock.Mock(side_effect=some_handler).start()
如果此解决方案有任何问题,或者有更好的解决方法,我很想听听!