2013-03-19 3 views
2

mock.patch로 폼을 모의하려했으나 할 수 없습니다. 이 코드django 테스트에서 폼 (조롱) 폼을

forms.py

class CreatePostForm(object): 
    pass 

views.py 있습니다

from forms import CreatePostForm 

def doit(): 
    print CreatePostForm() 

을 나는 고립에서이보기를 테스트하고자합니다. 나는 mock.patch와 양식을 패치를 시도하고 내가 그런 걸 쓴 :

tests.py : 나는 아무것도에게

을 솔루션을 구글없고 찾으려고

from mock import patch 

import views 

with patch('forms.CreatePostForm') as Form: 
    views.doit() 

답변 : 감사합니다 @ 좋은 대답과 좋은 코드 예제를위한 dstanek

+0

http://williamjohnbert.com/2011/07/how-to \ -unit-testing-django-with-mocking-and-patching/ – catherine

+0

@ 캐서린 나는 당신의 접근법을 시도했지만 그것은 나를 위해 일하지 않는다 – kharandziuk

+0

@MaxKharandziuk는 당신이 정교 할 수 있는가? 에 "작동하지 않는"? –

답변

5

패치를 사용할 때 모의하려는 대상의 대상을 지정하십시오. 이것은 대개 정의 된 곳이 아닌 가져온 곳입니다.

테스트가 실행될 때까지 views 모듈을 이미 가져 왔기 때문입니다. 아래 예에서 설명한 것처럼 클래스를 가져 오는 경우 views 모듈에는 forms.CreatePostForm에 대한 참조가 포함됩니다. 따라서 forms.CreatePostForm을 변경해도이 참조는 변경되지 않습니다. 보기에 지정된 forms.CreatePostForm 모듈을 가져온 경우 상황이 달라집니다.

나는 극히 최소의 예를 아래에 포함 시켰습니다.

forms.py

class CreatePostForm(object): 
    pass 

views.py :

from forms import CreatePostForm 

def doit(): 
    print CreatePostForm() 

tests.py :

from mock import patch 

import views 

with patch('views.CreatePostForm') as Form: 
    views.doit() 
+0

extremelly 좋은 대답. 당신은 정확하고 정말 아름다운 코드 예제를했습니다. – kharandziuk

+0

+1'CreatePostForm'에 대한 네임 스페이스는 뷰에 있습니다. 패치가 사용 된 위치 (가져 오기 기준). http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch – CppLearner