gpt4 book ai didi

django - 如何使用 Django 模型应用测试驱动开发?

转载 作者:行者123 更新时间:2023-11-28 19:56:08 25 4
gpt4 key购买 nike

我最近了解了测试驱动开发,并想在我的 Django 项目中开发新应用程序时试一试。我一直在阅读 Test-Driven Development with Python这很棒。然而,有时我发现书中的示例(待办事项列表)过于简单——例如,当 testing Models is introduced ,作者有一个测试创建对象,保存它们,然后从数据库中拉出对象来检查它们的值。当然,当您的模型只有一个 ModelField 时,这很容易。

但是当您的模型有 20 个 ModelField 时呢?您是否应该有一个创建对象及其所有字段的测试,然后保存该对象,然后检查每个字段的值?对每个领域进行单独测试是否更好?

在我的具体案例中,我有一个包含大约五个必填字段的模型,然后还有大约十五个可选字段。我现在的想法是首先在我的 TestCase 类中创建一个函数,该函数使用默认字段创建该模型的对象。然后,我将进行测试以确保该对象正常保存,然后对每个单独的可选字段进行另一次测试。看起来是很多测试,但是很多小测试不是比一个大测试好吗?

洞察力赞赏!

最佳答案

我是这本书的作者。我的意思是该测试更多地是对 Django ORM 的介绍,而不是最佳实践的演示,我当时试图对此进行解释,但我想有些混淆是不可避免的。我会考虑如何以不同的方式呈现事物。

无论如何,如果您跳到 a few chapters later在书中,我展示了如何将测试简化为更符合最佳实践的东西。

是否测试基本的 Django 模型由您决定——有些人会说测试声明性语法是多余的,其他人会说简短的测试作为占位符是很好的。这是您可能会用到的:

class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author)
ISBN = models.CharField(max_length=35)
abstract = models.TextField()


class BookTest(TestCase):

def test_defaults(self):
book = Book()
self.assertEqual(book.title, '')
self.assertEqual(book.author, None)
self.assertEqual(book.ISBN, '')
self.assertEqual(book.abstract, '')

所以这是一个占位符。如果您开始引入更复杂的字段,例如 publication_date 字段,它会鼓励您添加更多测试,该字段的默认值为 datetime.today() + one_month,这可能需要进行一些测试以确保您做对了。使用占位符可以降低后续测试的障碍。其他人会告诉你这太过分了。你必须找到自己的平衡点。

广为接受的一件事是您绝对应该测试行为。因此,如果您的模型具有自定义方法:

class Book(models.Model):
# [...]

def is_available(self):
return self.pub_date < datetime.today() and Stock.objects.filter(book=self).count() > 0

然后对此进行某种测试绝对是个好主意。

关于django - 如何使用 Django 模型应用测试驱动开发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com