Python 在基于类的视图中模拟表单,不使用MagicMock
在基于类的视图中,我一直在努力模拟表单类来替换它的实例。但是它看起来是这样的,因为表单位于class属性中,所以它发生在我用mock替换表单类之前。例如: app/views.pyPython 在基于类的视图中模拟表单,不使用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进行
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')
?@DanielRosemanform
是SomeViewClass
的一个属性,而不是SomeForm
@DanielRoseman就是这样!谢谢。虽然foxyblue位于属性的正确位置。你能给我一个答案让我验证一下吗?