Jestem nowy Mock i piszę badanej jednostki dla tej funkcji:Django unittest i szydząc moduł wnioski
# 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
używam Michael Foord's Mock bibliotekę jako część mojego badanej jednostki i mam trudności drwi z response.json()
zwrócić strukturę JSON. Oto mój test jednostkowy:
# 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')
Próbowałem wielu kombinacji różnych ustawień próbnych po przeczytaniu dokumentów bez powodzenia. Gdybym wydrukować results
w moim badanej jednostki zawsze wyświetla następujące zamiast struktury danych json chcę:
<MagicMock name=u'requests.get().json().__getitem__().__getitem__()' id='30315152'>
przemyślenia na temat tego, co robię źle?
Wielkie dzięki za tę odpowiedź. Teraz działa tak, jak się spodziewałem. –
Jeszcze jeden test asercji, który chciałbym dodać do testu jednostkowego, to zapewnienie wywołania metody request.get z oczekiwanymi parametrami. Coś w rodzaju 'mock_get.assert_called_with ('http://api.example.com', payload = {'Email': self.user.email}'. To zapewnia, że twój kod biblioteki wywołuje żądanie z oczekiwanymi parametrami, co jest tak samo ważne, jak testowanie wartości zwracanej przez kod biblioteki, która jest wyśmiewana. – adam