我试着用mock.patch模拟表单并且不能。我有这个代码
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 :(得分: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()