繁体   English   中英

为 Django 模型编写测试用例

[英]Writing test cases for django models

在我目前的项目进行到一半之后,在经历了无数分钟调试的痛苦之后,我决定采用 TDD。 首先,我计划为每个现有模型编写一组单元测试。 但是对于只定义了属性(即没有其他方法/属性)的模型,我不确定我需要测试什么以及如何测试。

class Product(models.Model):
    name = models.CharField(max_length=50)
    description = models.TextField(default='', blank=True)
    retails = models.ManyToManyField(Retail, verbose_name='Retail stores that carry the product')
    manufacturer = models.ForeignKey(Manufacturer, related_name='products')
    date_created = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)

Product为例,单元测试应该涵盖哪些内容? 应该如何覆盖ForeignKeyManyToManyField

这是一篇我觉得很有帮助的文章: A Guide to Testing in Django (archived link) 以下是要测试的内容的一个很好的总结:

对于刚开始测试的开发人员/设计人员来说,另一个常见的挫折是“我应该(或不应该)测试什么?”的问题。 虽然这里没有严格适用于任何地方的硬性规则,但我可以提供一些关于做出决定的一般准则:

  • 如果有问题的代码是内置的 Python 函数/库,请不要测试它。 像日期时间库这样的例子。

  • 如果有问题的代码内置在 Django 中,请不要测试它。 例如模型上的字段或测试内置 template.Node 如何呈现包含的标签。

  • 如果您的模型具有自定义方法,您应该测试它,通常使用单元测试。

  • 自定义视图、表单、模板标签、上下文处理器、中间件、管理命令等也是如此。如果您实现了业务逻辑,您应该测试代码的各个方面。

因此,对于您的示例,在您编写一些自定义函数之前,实际上不会有任何测试。
在我看来,测试ForeignKeyManyToManyField链接属于第二类(Django 内置的代码),所以我不会测试这些,因为您实际上是在测试 Django 是否正常运行。 如果您有一个创建产品实例的方法,包括对外关系和 M2M,您可以验证数据是否已创建,这将测试您的自定义方法,而不是 Django 功能。

使用 TDD 范式,构建测试以验证业务逻辑和设计要求。

我的 CS350 类 TDD 规定测试所有访问器和修改器是最佳实践。 因此,对于模型,您首先要编写调用每个评估器函数的测试,并确保它返回正确的值。

对于更改模型中数据字段的每个函数,您不仅要特别测试该数据字段的结果,还要测试模型实例中的所有其他字段,以确保它们都没有被错误修改.

重申:如果模型具有字段 a、b 和 c,您将使用您的构造函数创建一个实例,然后资产所有三个都已正确设置。 假设还有另一个函数 set_a()。 您会断言不仅 'a' 的值发生了变化,而且 b 和 c 的值保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM