2017-10-15 8 views
0

J'essaye de simuler une fonction. Lorsque je tente de se moquer de la fonction core.use_cases.add_owner_to_place, le simulacre ne fonctionne pas. Il continue d'imprimer "Ouch".Mock continue d'appeler la fonction réelle

J'ai essayé de tester mocked_add_owner_to_place.called et il renvoie False.

Est-ce que quelqu'un sait pourquoi il continue à utiliser la fonction réelle même si je me moque?

views.py:

from core.use_cases import add_owner_to_place 

class CreatePlace(LoginRequiredMixin, FormView): 
template_name = 'place/create_place.html' 
form_class = PlaceForm 
success_url = reverse_lazy('place_list') 

def form_valid(self, form): 
    place = form.save() 
    add_owner_to_place(place, self.request.user) 
    return super(CreatePlace, self).form_valid(form) 

tests.py:

from unittest.mock import patch, Mock 

@patch('core.use_cases.add_owner_to_place') 
@patch('core.forms.PlaceForm.is_valid') 
@patch('core.forms.PlaceForm.save') 
def test_save_should_be_called(self, mocked_save, mocked_is_valid, mocked_add_owner_to_place): 
    self.client.post(reverse('place_create'), data={}) 
    self.assertTrue(mocked_save.called) 

uses_cases.py:

def add_owner_to_place(place, user): 
    print('Ouch') 

Répondre

0

Ainsi, la recherche autour d'un nd regardant certains codes sur github, j'ai découvert que j'ai besoin de se moquer de la view même si la fonction appartient au module use_cases.

Donc, mon code est maintenant:

tests.py

from unittest.mock import patch, Mock 

@patch('core.views.add_owner_to_place') 
@patch('core.forms.PlaceForm.is_valid') 
@patch('core.forms.PlaceForm.save') 
def test_save_should_be_called(self, mocked_save, mocked_is_valid, mocked_add_owner_to_place): 
    self.client.post(reverse('place_create'), data={}) 
    self.assertTrue(mocked_save.called) 

Je sais que cela fonctionne, mais maintenant je dois chercher pourquoi cela fonctionne. Je vais l'expliquer quand je le découvrirai.

+1

La raison en est expliquée de manière assez complète dans la [documentation] (https://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch) – solarissmoke