模型字段应该在 Django 中测试吗?

问题描述 投票:0回答:1
class Author(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    date_of_birth = models.DateField(null=True, blank=True)
    date_of_death = models.DateField('Died', null=True, blank=True)

MDN 说:

您不需要显式测试first_name和last_name是否已正确存储为数据库中的CharField,因为这是由Django定义的 ... 但是,您应该检查用于标签的文本(名字、姓氏、出生日期、死亡日期)以及为文本分配的字段大小(100 个字符),因为这些是您设计的一部分,并且可能会影响您的体验。将来会被打破/改变。

如果我想遵循这个建议,我不会编写一个测试来测试该字段只接受 100 个字符,因为这意味着测试 Django 的行为。相反,我会编写一个测试来测试

max_length
确实等于
100

这个测试可能看起来像这样:

    def test_max_length(self):
        self.assertEqual(models.Author._meta.get_field('first_name').max_length, 100)

我的感觉是这个测试基本上和测试我写的东西是一样的。当然,如果错误的

max_length
破坏了其他代码段,则应该对其进行测试,但应该在其他代码段中进行测试。测试 Django 模型字段的最佳实践是什么?除了来自 MDN 的引用之外,我只能找到“尽可能多地测试”或“如果它可能损坏,你应该测试它”之类的非常笼统的陈述。具体来说,我对测试代码/行为和配置之间的细线的资源或意见感兴趣。我还希望就以下问题提供意见:设置/参数可能具有的可能用途数量是否会影响该参数的测试方法。例如,有人可能会争辩说
max_length
的唯一目的是定义最大长度,因此开发人员不会出于不同的目标而意外更改它,也不会无意中更改
max_length
- 您只更改
max_length
如果你想改变
max_length
.

django testing django-models django-model-field
1个回答
0
投票

编写测试,以便您能够控制一切。在一个小项目中,这似乎难以置信,但当事情失控时,它很快就会失控。然后它就会开始变得更有意义。

未经严格测试的程序很可能存在错误。没有测试的程序就死了。

在多个开发者共同贡献的基地中,你认为不必要的东西却是不可或缺的。我举一个简单的例子:

在模型

Author
中,由于空间限制,
max_length
Author.first_name
设置为 20。具有此最大值的字段已被输入到数据库中,因此我们不能因为该字段而进一步降低。

def test_max_length(self):
    self.assertEqual(models.Author._meta.get_field('first_name').max_length, 20)

上面的简单测试将在以下场景中有用:

  • 不同的开发人员增加了
    max_length
    Author.first_name
    以允许更长的值,但不考虑空间限制。测试将会失败,如果添加了任何消息,他们就会知道为什么有这个要求。
  • 另一位开发人员减小了
    max_length
    Author.first_name
    以节省空间,但不知道数据库中已存在的值。测试也会失败,如果添加了任何消息,他们就会知道为什么会这样。

最终,自动化测试可以在混乱时带来平静[1]


[1]我有点夸张了。

© www.soinside.com 2019 - 2024. All rights reserved.