Python:如何使用 json.load 模拟 HTTPSConnection 请求和响应对象
Python: How to mock HTTPSConnection request and response object using json.load
我需要在单元测试中模拟以下方法。
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'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not
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 时 运行 我的单元测试用例。 @patch 在这种情况下不起作用,因为每次 http.client.HTTPSConnection(url) 都会创建新的 Mock 对象。因此创建了模拟请求、响应和消息 类.
新模拟 类 创建为
from MockHTTPResponse import mock_response
def mock_http_connon(自己):
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。
我需要在单元测试中模拟以下方法。
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'the JSON object must be str, bytes or bytearray, ' TypeError: the JSON object must be str, bytes or bytearray, not 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 时 运行 我的单元测试用例。 @patch 在这种情况下不起作用,因为每次 http.client.HTTPSConnection(url) 都会创建新的 Mock 对象。因此创建了模拟请求、响应和消息 类.
新模拟 类 创建为
from MockHTTPResponse import mock_response
def mock_http_connon(自己):
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。