【问题标题】:Patching(mocking) forms form in django testsdjango 测试中的修补(模拟)表单形式
【发布时间】:2013-03-19 10:44:49
【问题描述】:

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

【问题讨论】:

标签: python django testing mocking python-mock


【解决方案1】:

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

这是因为当您的测试运行时,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()

【讨论】:

猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
相关资源
最近更新 更多