2017-10-15 13 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でいくつかのコードを探していたら、その機能がuse_casesモジュールに属していても、私はviewからモックする必要があることを知りました。

だから私のコードは次のとおりです。

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

関連する問題