在python 2.7中是否有替代方法来密封(来自unittest.mock)?

时间:2019-01-22 06:30:12

标签: python python-3.x python-2.7 unit-testing python-unittest

我有以下要编写单元测试的功能

def get_user_data(user, session):
    '''Given a github user, gets it data'''
    url = f'https://api.github.com/users/{user}'
    response = session.get(url)
    json_response = response.json()
    return json_response["login"]

这就是我测试上述功能的方式

from unittest.mock import Mock, MagicMock
from requests import Session

response_payload = {"login": "agrawalo"}
fake_session = MagicMock(spec=Session)
fake_session.get.return_value.get_json.return_value = response_payload

如果您注意到上面的代码,则不是在响应对象上模拟“ json”方法,而是为“ get_json”方法创建了模拟。最终在响应对象上创建get_json方法。现在,当我打电话

get_user_data("agrawalo", fake_session)

我明白了

<MagicMock name='mock.get().json().__getitem__()' id='139783470311800'>

我希望上述单元测试因NoAttributeError而失败。

在python 3.8中,有一种方法可以使用unitest.mock中的“密封”来解决上述问题。

# from python 3.8
from unittest.mock import seal
seal(fake_session)

get_user_data("agrawalo", fake_session)

如何在python 2.7中做到这一点?

0 个答案:

没有答案