Tôi mới đến Mock và đang viết một bài kiểm tra đơn vị cho chức năng này:Django unittest và chế giễu các yêu cầu mô-đun
# 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
Tôi đang sử dụng Michael Foord's Mock thư viện như là một phần của bài kiểm tra đơn vị của tôi và đang gặp khó khăn trong chế giễu response.json()
để trả về một cấu trúc json. Đây là thử nghiệm đơn vị của tôi:
# 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')
Tôi đã thử kết hợp nhiều cài đặt giả khác nhau sau khi đọc tài liệu không có may mắn. Nếu tôi in results
trong thử nghiệm đơn vị của tôi nó luôn luôn hiển thị sau thay vì cấu trúc dữ liệu json Tôi muốn:
<MagicMock name=u'requests.get().json().__getitem__().__getitem__()' id='30315152'>
Suy nghĩ về những gì tôi đang làm sai?
Rất cám ơn cho câu trả lời này. Nó bây giờ làm việc như tôi đã hy vọng. –
Một thử nghiệm xác nhận khác tôi sẽ thêm vào thử nghiệm đơn vị của bạn sẽ là đảm bảo phương thức request.get được gọi với các tham số dự kiến. Một cái gì đó như, 'mock_get.assert_called_with ('http://api.example.com', payload = {'Email': self.user.email}'. Điều này đảm bảo rằng mã thư viện của bạn đang thực hiện cuộc gọi yêu cầu với các tham số dự kiến, điều đó cũng quan trọng như kiểm tra giá trị trả về của mã thư viện, là giá trị được mô phỏng. – adam