Я пишу тестовые примеры, используя библиотеку python mock.Python mock patch не реселлирует возвращаемое значение
class AddressByPhoneTestCase(TestCase):
def test_no_content_found_with_mock(self):
print "this function will mock Contact model get_by_phone to return none"
with mock.patch('user_directory.models.Contact') as fake_contact:
print "fake_contact_id ", id(fake_contact)
conf = { 'get_by_phone.return_value': None }
fake_contact.configure_mock(**conf)
resp = self.client.get(reverse('get_address_by_phone'), {'phone_no' : 1234567891})
self.assertTrue(resp.status_code == 204)
def test_success_with_mock(self):
print "this function will test the address by phone view after mocking model"
with mock.patch('user_directory.models.Contact') as fake_contact:
print "fake_contact_id ", id(fake_contact)
contact_obj = Contact(recent_address_id = 123, best_address_id = 456)
conf = { 'get_by_phone.return_value': contact_obj }
fake_contact.configure_mock(**conf)
resp = self.client.get(reverse('get_address_by_phone'), {'phone_no' : 1234567891})
resp_body = json.loads(resp.content)
self.assertTrue(resp_body == { 'recent_address_id' : 123,
'frequent_address_id' : 456
}
)
Во втором случае Contact.get_by_phone не все еще возвращающимся None, даже если я изменил его, чтобы вернуть contact_obj, когда я снял верхнюю часть корпуса теста, этот тест случаев проходит, но терпит неудачу иначе ссылаясь на верхнюю причину кто-то помочь , как я могу сделать python mock patch для сброса значения.
Это должно работать нормально, но оригинальный пост должен работать. Пожалуйста, уточните, когда вы можете сделать свой оригинальный пост, как есть, спасибо – Gang
@Gang Нет выше не работает. Выше будет работать, если в моих представлениях я сделаю это из моделей импорта user_directory. и используйте модели .Контакт вместо контакта –