在django测试中修补(模拟)表单形式

时间:2013-03-19 10:44:49

标签: python django testing mocking python-mock

我试着用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提供了良好的答案和良好的代码示例

1 个答案:

答案 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()