【问题标题】:MagicMock the response to get data in python 3.xMagicMock 在 python 3.x 中获取数据的响应
【发布时间】:2020-01-04 03:25:03
【问题描述】:

我有以下两个函数,我正在尝试使用 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

【问题讨论】:

    标签: python python-3.x mocking python-unittest magicmock


    【解决方案1】:

    您可以使用Mock 对象模拟get_response,该对象返回一个Mock 对象,该对象具有200status_code 属性和模拟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"}'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      相关资源
      最近更新 更多