2

我试图用 mock.patch 模拟表单并且不能。我有这个代码

表格.py

class CreatePostForm(object):
    pass

视图.py:

from forms import CreatePostForm

def doit():
    print CreatePostForm()

我想单独测试这个视图。我试图用 mock.patch 修补表单,我写了这样的东西:

测试.py:

from mock import patch

import views

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

我试图用谷歌搜索解决方案,但一无所获

已回答:感谢@dstanek 提供好的答案和好的代码示例

4

1 回答 1

5

当您使用补丁时,您指定要模拟的对象的目标。这通常是导入的地方,而不是定义的地方。

这是因为当您的测试运行时,views模块已经被导入。如果您像我在下面的示例中那样导入类,那么views模块将包含对forms.CreatePostForm. 所以改变forms.CreatePostForm不会改变这个参考。forms.CreatePostForm如果您按照视图中指定的方式导入模块,情况会有所不同。

我在下面包含了一个非常简单的示例。

表格.py

class CreatePostForm(object):
    pass

视图.py:

from forms import CreatePostForm

def doit():
    print CreatePostForm()

测试.py:

from mock import patch

import views

with patch('views.CreatePostForm') as Form:
    views.doit()
于 2013-03-19T15:27:58.987 回答