Django 测试用例设置期间的断言

Assertions during Django test case setUps

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

比如我有以下型号:

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

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

该产品将具有由 ForeignKey 关系指定的主图像与 TestPrimaryImage class 条目。

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

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 class 来引用。在setUp期间做以下事情是否合适:

def setUp(self):

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

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

将新创建的对象分配给 class 变量并声明其创建?该断言意味着如果新产品未成功创建 none,其他测试方法将能够 运行。例如,TestMainImage 在创建期间将没有可创建引用的产品。

似乎 对我来说是一个明智的方法,但我是 Django 的新手,一般来说不要与测试老手混淆。

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

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

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