我是Mock的新手,正在编写一个针对此函数的单元测试:
# utils.py
import requests
def some_function(user):
payload = {'Email': user.email}
url = 'http://api.example.com'
response = requests.get(url, params=payload)
if response.status_code == 200:
return response.json()
else:
return None
我正在使用Michael Foord的Mock库作为单元测试的一部分,并且在模拟response.json()
以返回一个JSON结构时遇到了困难。这是我的单元测试:
# tests.py
from .utils import some_function
class UtilsTestCase(unittest.TestCase):
def test_some_function(self):
with patch('utils.requests') as mock_requests:
mock_requests.get.return_value.status_code = 200
mock_requests.get.return_value.content = '{"UserId":"123456"}'
results = some_function(self.user)
self.assertEqual(results['UserId'], '123456')
我在阅读文档后尝试了许多不同的模拟设置,但都没有成功。如果在我的单元测试中打印results
,它总是显示以下内容,而不是我想要的JSON数据结构:
<MagicMock name=u'requests.get().json().__getitem__().__getitem__()' id='30315152'>
我在做什么事情上出了什么问题?
mock_get.assert_called_with('http://api.example.com', payload={'Email': self.user.email}
。这将确保您的库代码使用预期参数进行请求调用,这与测试库代码的返回值(被Mocked)一样重要。 - adam