为django模型编写测试用例

tam*_*are 36 python django django-models django-testing

在我目前的项目中途,在经历了无数分钟调试的痛苦之后,我决定采用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)
Run Code Online (Sandbox Code Playgroud)

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

Fur*_*tor 76

这是我发现有用的文章:http://toastdriven.com/blog/2011/apr/10/guide-to-testing-in-django/.以下是测试内容的一个很好的总结:

对于新测试的开发人员/设计人员来说,另一个常见的挫折是"我应该(或不应该)测试什么?"的问题.虽然这里没有适用于所有地方的硬性规定,但我可以提供一些通用的指导方针来做出决定:

  • 如果有问题的代码是内置的Python函数/库,请不要测试它.例如datetime库.

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

  • 如果您的模型具有自定义方法,则应通过单元测试对其进行测试.

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

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

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

  • 是的,它真的帮助了我.我认为测试是开发中最重要的部分之一,由于时间限制而经常被忽略.这也是编写高效,有效和非冗余测试非常重要的原因.快乐测试!:-) (3认同)
  • @Furbeenator,我的同事说我们应该测试“auto_add”字段,因为有人可能会在将来更改它和/或删除它。她说得对吗? (2认同)
  • 该链接不再有效,但我认为您提供的摘要有部分错误。我们“配置”模型的方式很容易出现错误和错误,因此我们需要测试字段。我们需要知道我们有正确模型的 FK,我们需要知道 CharField 上有正确的“max_length”。这不是测试 Django,这是测试我们自己的代码,Django 恰好为我们提供了一种更短的编写方式。 (2认同)