我是TDD的新手,正在尝试在Django项目中应用TDD实践。
基于伦敦学派的TDD工作流程,我从外向内逐层进行开发,包括视图层、表单层和模型层。在表单层,我计划构建一个模型表单,并编写一些自定义的验证方法。我认为,根据TDD原则,我只需要测试我的自定义方法,而不触及以下内容:
- 由Django提供的整个ModelForm逻辑,因为这是一个经过充分测试的依赖项。 - 下层的模型层,因为它还不存在。
但是我该如何做呢?例如,对于以下模型表单:
基于伦敦学派的TDD工作流程,我从外向内逐层进行开发,包括视图层、表单层和模型层。在表单层,我计划构建一个模型表单,并编写一些自定义的验证方法。我认为,根据TDD原则,我只需要测试我的自定义方法,而不触及以下内容:
- 由Django提供的整个ModelForm逻辑,因为这是一个经过充分测试的依赖项。 - 下层的模型层,因为它还不存在。
但是我该如何做呢?例如,对于以下模型表单:
from django import forms
from app import models
class MyModelForm(forms.ModelForm):
class Meta:
model = models.MyModel
fields = ("field1", "field2")
def clean_field1(self):
# custom cleaning logic
def clean_field2(self):
# custom cleaning logic
def clean(self):
# custom cleaning logic
How can I (or should I) mock
MyModel
? I've come up with@patch("app.forms.MyModelForm._meta.model") class FormTest(TestCase): #...
But maybe it's a little bit insane? And I'm not sure how well the
Mock
object will work withModelForm
internal logic. For one thing, all form fields are gone, aren't they?How can I unit test these custom methods? By setting
self.cleaned_data
manually?
MyModel
属于被测试单元吗?它不是更低级别的依赖项(意味着表单层依赖于模型层)吗? - Naitree