Python:如何使用json.load模拟HTTPSConnection请求和响应对象



我需要在单元测试中模拟以下方法。

def get_app_info(role):
conn = http.client.HTTPSConnection(url)
conn.request(
method="GET",
url="/v1/profile",
headers={
"appName": app["name"],
"appRole": role
}
)
response = conn.getresponse()
res_data = json.load(response)
conn.close()
return res_data

我试图修补@patch('http.client.HTTPSConnection'),所以请求很可笑,但在json.load失败了,出现了以下错误。

raise TypeError(f'JSON对象必须是str、bytes或byterarray,'TypeError:JSON对象必须是str、字节或字节数组,而不是MagicMock

我试着嘲笑

def mocked_response(*args, **kwargs):
class MockResponse:
def __init__(self, json_data, status_code):
self.json_data = json_data
self.status_code = status_code
def json(self):
return self.json_data
return MockResponse(
{
"url": "/test/home
},
200)

class MyGreatClassTestCase(unittest.TestCase(:

@patch('http.client.HTTPSConnection')
@patch('http.client.HTTPResponse')
def test_retrive_token(self, mock_con, mock_resp,  side_effect = mocked_response):
json_data = common.retrieve_access_token("sometoken")
print(json_data)

我们非常感谢您的任何投入。

我能够在模拟HTTPSConnection和HTTPResponse的同时运行我的单元测试用例@补丁在这种情况下不会起作用,因为每次http.client.HTTPSConnection(url(都会创建新的Mock对象。因此创建了模拟请求、响应和消息类。

作为创建的新模拟类

from MockHTTPResponse import mock_response

def mock_http_connon(self(:

class MockHTTPSConnection(object):
print(object)
def request(method, url, body, headers):
print('request is executed')
def headers(self):
return "content-type", "accept"
def getresponse():
return mock_response()
def close():
print("close MockHTTPSConnection")
return MockHTTPSConnection

类似的MockResponse和MockMessage。

相关内容

  • 没有找到相关文章

最新更新