2017-10-15 74 views
0

我试图嘲笑一个功能。当我尝试模拟功能core.use_cases.add_owner_to_place模拟不起作用。它不断打印“哎唷”。模拟不断调用实际功能

我试过测试mocked_add_owner_to_place.called,它返回False。

有谁知道为什么即使我嘲笑它仍然使用真正的功能?

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') 

回答

0

所以,围绕着搜索在github上查找一些代码,我发现我需要从view中嘲笑,即使该功能属于use_cases模块。

所以我的代码现在是:

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) 

我知道这工作,但现在我需要搜索,为什么它的工作原理。我会在解释它时解释它。

+1

其原因在[documentation](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch)中有相当详细的解释, – solarissmoke