【问题标题】:Assertions during Django test case setUpsDjango 测试用例设置期间的断言
【发布时间】:2018-10-17 14:22:56
【问题描述】:

我只是在学习使用内置测试工具在 Django 中进行测试的方法,尤其是 django.test.TestCase。我想知道在新测试类的初始setUp 期间使用断言方法是否是最佳实践?

例如,我有以下型号:

class TestProduct(BaseModel):
    name = models.CharField(...)

class TestPrimaryImage(BaseModel):
    url = models.TextField(...)
    product = models.ForeignKey('TestProduct', ...)

这是一种产品,其主图像由ForeignKey 关系与TestPrimaryImage 类条目指定。

按照此处的示例:https://docs.djangoproject.com/en/2.1/topics/testing/overview/ 我正在创建一个这样的测试类:

class NewProductTestCase(TestCase):

    def setUp(self):

        models.TestProduct.objects.create(
            name='TestProductName'
        )

    def TestMainImage(self):

        models.TestPrimaryImage.objects.create(
            url="https://example.com/test-image-url.jpg",
            product=?
        )

我不确定的部分集中在 TestMainImage 方法上,它需要 TestProduct 类来引用。在setUp期间进行以下操作是否合适:

def setUp(self):

    self.test_product = models.TestProduct.objects.create(
        name='TestProductName'
    )

    self.assertIsInstance(self.test_product, models.TestProduct)

将新创建的对象分配给类变量并断言其创建?该断言意味着如果新产品没有成功创建,其他任何测试方法都无法运行。例如,TestMainImage 在创建过程中没有要创建引用的产品。

似乎对我来说是一种明智的方法,但我是 Django 新手,一般来说不要对测试老手感到困惑。

【问题讨论】:

  • 为什么必须在setUp中添加断言?如果第一次设置失败,很自然所有相关的单元测试都失败了。

标签: django django-testing django-tests


【解决方案1】:

始终牢记这一点:永远不要为 django 内部编写测试

django 已经过很好的测试,如果您认为需要测试某些东西,请向他们发送拉取请求

所以对于您的示例,我们知道models.TestProduct.objects.create() 总是返回一个实例或抛出一个执行。所以你不需要测试任何东西

【讨论】:

  • 好的,这完全有道理。我想我的后续行动是在setUp 期间将初始models.TestProduct.objects.create(...) 分配给一个变量以供以后参考是否明智?如self.test_product = models.TestProduct.objects.create(...)
  • 是的,实际上setUp 就是为了写这些代码:-)
  • 感谢您的帮助。这似乎是合适的地方,但我不确定。
  • 请注意,我建议使用不带前缀 test_ 的变量名,这可能会导致混淆(使用前缀为 test_ 的变量名会使您的代码难以阅读,因为测试方法必须以 @987654328 为前缀@)
猜你喜欢
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多