MagicMock 获取数据的响应 python 3.x
MagicMock the response to get data in python 3.x
我有以下两个函数,我正在尝试使用 magicMock 编写单元测试用例。
import json
from unittest import mock
from unittest.mock import MagicMock
def get_response(m, time):
response = get_data(m, time)
return response
def my_method():
m = ''
time = "2019-08-30"
resp = get_response(m, time)
if resp.status_code = 200:
data = json.loads(resp.text)
我正在尝试编写单元测试用例以使用 MagicMock 获取响应代码和文本:
ok_response_mock = MagicMock()
type(ok_response_mock).status_code = mock.PropertyMock(return_value=200)
ok_response_mock.text.return_value = "{'blah':'blah'}"
get_response = MagicMock()
get_response.return_value = ok_response_mock
但我没有得到这个工作。上述方法无法模拟 resp.text
.
您可以使用 Mock
对象模拟 get_response
,该对象 return 是具有 status_code
属性 200
的 Mock
对象,并且您的模拟 JSON 内容的 text
属性:
import json
from unittest.mock import Mock
def my_method():
m = ''
time = "2019-08-30"
resp = get_response(m, time)
if resp.status_code == 200:
print(json.loads(resp.text))
get_response = Mock(return_value=Mock(status_code=200, text='{"blah": "blah"}'))
my_method()
这输出:
{'blah': 'blah'}
由于Mock
对象的默认return值是Mock
对象,你也可以配置Mock
对象的return_value
属性像这样,它也能正常工作:
get_response = Mock()
get_response.return_value.status_code = 200
get_response.return_value.text = '{"blah": "blah"}'
我有以下两个函数,我正在尝试使用 magicMock 编写单元测试用例。
import json
from unittest import mock
from unittest.mock import MagicMock
def get_response(m, time):
response = get_data(m, time)
return response
def my_method():
m = ''
time = "2019-08-30"
resp = get_response(m, time)
if resp.status_code = 200:
data = json.loads(resp.text)
我正在尝试编写单元测试用例以使用 MagicMock 获取响应代码和文本:
ok_response_mock = MagicMock()
type(ok_response_mock).status_code = mock.PropertyMock(return_value=200)
ok_response_mock.text.return_value = "{'blah':'blah'}"
get_response = MagicMock()
get_response.return_value = ok_response_mock
但我没有得到这个工作。上述方法无法模拟 resp.text
.
您可以使用 Mock
对象模拟 get_response
,该对象 return 是具有 status_code
属性 200
的 Mock
对象,并且您的模拟 JSON 内容的 text
属性:
import json
from unittest.mock import Mock
def my_method():
m = ''
time = "2019-08-30"
resp = get_response(m, time)
if resp.status_code == 200:
print(json.loads(resp.text))
get_response = Mock(return_value=Mock(status_code=200, text='{"blah": "blah"}'))
my_method()
这输出:
{'blah': 'blah'}
由于Mock
对象的默认return值是Mock
对象,你也可以配置Mock
对象的return_value
属性像这样,它也能正常工作:
get_response = Mock()
get_response.return_value.status_code = 200
get_response.return_value.text = '{"blah": "blah"}'