我有以下要编写单元测试的功能
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中做到这一点?