MagicMock在python3.x中获取数据的响应

2024-04-20 14:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下两个函数,我正在尝试使用magicMock编写unittest用例。你知道吗

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)

我正在尝试编写unittest用例,以使用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。你知道吗


Tags: textfromimportjsongetreturntimevalue
1条回答
网友
1楼 · 发布于 2024-04-20 14:17:58

您可以使用Mock对象来模拟get_response,该对象返回一个Mock对象,该对象的status_code属性为200,并且模拟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对象的默认返回值是Mock对象,因此您还可以像这样配置Mock对象的return_value属性,它也可以正常工作:

get_response = Mock()
get_response.return_value.status_code = 200
get_response.return_value.text = '{"blah": "blah"}'

相关问题 更多 >