我是新來嘲笑和我編寫單元測試這一功能:Django的單元測試和嘲弄請求模塊
# 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's 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'>
的思考?
這個答案非常感謝。它現在正如我所希望的那樣工作。 –
我將添加到單元測試中的另一個斷言測試將確保request.get方法以期望的參數調用。就像''mock_get.assert_called_with('http://api.example.com',payload = {'Email':self.user.email}'這可以確保您的庫代碼正在使用期望的參數進行請求調用,這與測試庫代碼的返回值一樣重要,該值被嘲笑。 – adam