Python 在基于类的视图中模拟表单,不使用MagicMock

Python 在基于类的视图中模拟表单,不使用MagicMock,python,django,django-class-based-views,python-mock,django-unittest,Python,Django,Django Class Based Views,Python Mock,Django Unittest,在基于类的视图中,我一直在努力模拟表单类来替换它的实例。但是它看起来是这样的,因为表单位于class属性中,所以它发生在我用mock替换表单类之前。例如: app/views.py from app.forms import SomeForm#出于某种原因,这是我的模拟。。。 类SomeViewClass(视图): 形式=某种形式。。。而这是真实的某种形式 def post(自我,请求): form=self.form(request.POST、request.FILES) #在这里用pdb进行

在基于类的视图中,我一直在努力模拟表单类来替换它的实例。但是它看起来是这样的,因为表单位于class属性中,所以它发生在我用mock替换表单类之前。例如:

app/views.py

from app.forms import SomeForm#出于某种原因,这是我的模拟。。。
类SomeViewClass(视图):
形式=某种形式。。。而这是真实的某种形式
def post(自我,请求):
form=self.form(request.POST、request.FILES)
#在这里用pdb进行黑客攻击

#(Pdb)self.form=SomeForm问题在于,Django已经加载了视图,
form
字段已经定义并指向
SomeForm
生产类

正如@DanielRoseman和@foxyblue在他们的评论中指出的,可以直接在类中修补字段。事实上。如前所述,可以使用
patch.object
(依我看,这是最好的解决方案,因为它更明确,更不容易出错)

测试已更正: 带有
补丁

@patch('app.views.SomeView.form',autospec=SomeForm)
def测试后有效形式应通过(自我模拟形式类):
“”“替换SomeViewClass.form中的SomeForm以通过有效测试”“”
mocked_form_class.is_valid.return_value=True
self.client.login(**self.credentials)
#代码,代码,代码
带有
补丁对象

@patch.object(SomeView,'form',autospec=SomeForm)
def测试后有效形式应通过(自我模拟形式类):
“”“替换SomeViewClass.form中的SomeForm以通过有效测试”“”
mocked_form_class.is_valid.return_value=True
self.client.login(**self.credentials)
#代码,代码,代码

如果你使用
@patch('app.views.SomeForm.form')
?@DanielRoseman
form
SomeViewClass
的一个属性,而不是
SomeForm
@DanielRoseman就是这样!谢谢。虽然foxyblue位于属性的正确位置。你能给我一个答案让我验证一下吗?