kha*_*iuk 2 python testing django mocking python-mock
我试着用mock.patch模拟表单并且不能.我有这个代码
forms.py
class CreatePostForm(object):
pass
Run Code Online (Sandbox Code Playgroud)
views.py:
from forms import CreatePostForm
def doit():
print CreatePostForm()
Run Code Online (Sandbox Code Playgroud)
我希望孤立地测试这个视图.我尝试使用mock.patch修补表单,我写了类似的东西:
tests.py:
from mock import patch
import views
with patch('forms.CreatePostForm') as Form:
views.doit()
Run Code Online (Sandbox Code Playgroud)
我试图谷歌寻求解决方案,什么也没发现
回答:感谢@dstanek提供了良好的答案和良好的代码示例
小智 5
使用补丁时,指定要模拟的对象的目标.这通常是导入它的位置,而不是它定义的位置.
这是因为在测试运行时,views
模块已经导入.如果您正在导入该类,就像我在下面的示例中所做的那样,那么该views
模块将包含对该类的引用forms.CreatePostForm
.所以改变forms.CreatePostForm
不会改变这个参考.如果您按forms.CreatePostForm
视图中的指定导入模块,情况会有所不同.
我在下面列出了一个极其简单的例子.
forms.py
class CreatePostForm(object):
pass
Run Code Online (Sandbox Code Playgroud)
views.py:
from forms import CreatePostForm
def doit():
print CreatePostForm()
Run Code Online (Sandbox Code Playgroud)
tests.py:
from mock import patch
import views
with patch('views.CreatePostForm') as Form:
views.doit()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1396 次 |
最近记录: |