Python django测试中的修补(模拟)表单
我试着用mock.patch来模拟表单,但是不行。我有这个密码 forms.pyPython django测试中的修补(模拟)表单,python,django,testing,mocking,python-mock,Python,Django,Testing,Mocking,Python Mock,我试着用mock.patch来模拟表单,但是不行。我有这个密码 forms.py class CreatePostForm(object): pass class CreatePostForm(object): pass views.py: from forms import CreatePostForm def doit(): print CreatePostForm() from forms import CreatePostForm def doit():
class CreatePostForm(object):
pass
class CreatePostForm(object):
pass
views.py:
from forms import CreatePostForm
def doit():
print CreatePostForm()
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()
from mock import patch
import views
with patch('views.CreatePostForm') as Form:
views.doit()
我试图用谷歌搜索解决方案,但什么也找不到
回答:感谢@dstanek提供了良好的回答和代码示例使用补丁时,您可以指定要模拟的对象的目标。这通常是导入位置,而不是定义位置 这是因为在测试运行时,
视图
模块已经导入。如果您像我在下面的示例中那样导入类,那么视图
模块将包含对表单.CreatePostForm
的引用。因此,更改forms.CreatePostForm
不会更改此引用。如果按照视图中指定的forms.CreatePostForm
导入模块,情况会有所不同
我在下面列出了一个极其简单的例子
forms.py
class CreatePostForm(object):
pass
class CreatePostForm(object):
pass
views.py:
from forms import CreatePostForm
def doit():
print CreatePostForm()
from forms import CreatePostForm
def doit():
print CreatePostForm()
tests.py:
from mock import patch
import views
with patch('forms.CreatePostForm') as Form:
views.doit()
from mock import patch
import views
with patch('views.CreatePostForm') as Form:
views.doit()
@凯瑟琳:我试过你的方法,但对我不起作用me@MaxKharandziuk你能详细解释一下“不起作用”吗?回答得非常好。代码+1的示例是正确的,非常漂亮,
CreatePostForm
的名称在视图中。使用位置的修补程序(基于导入)。