Django:保持 setUpTestData DRY

Ada*_*rrh 3 python django django-testing django-tests

我真的很享受 Django 1.8 中 setUpTestData 和 --keepdb 的便利!

但是,我遇到了在多个测试文件中保持数据一致的问题。我想将我的 setUpTestData 类方法放在一个位置,并让我的每个测试文件都引用它,这样我就不必将更改复制/粘贴到每个单独的测试文件中。

我对如何解决这个问题有点困惑,特别是关于 classmethod 似乎阻止我从另一个文件导入我的 setUpTestData 函数。有人能帮我吗?先谢谢了!

当前测试文件

from django.test import TestCase
from models import SpecificModel 

class TestData(TestCase):

    @classmethod
    def setUpTestData(cls):
        cls.test_item = SpecificModel.objects.create(data="some data")
Run Code Online (Sandbox Code Playgroud)

设置数据文件

???
Run Code Online (Sandbox Code Playgroud)

Mar*_*way 5

您可以继承声明该​​方法的 TestData 类吗?

base_tests.py

from django.test import TestCase
from models import SpecificModel 

class TestData(TestCase):

    @classmethod
    def setUpTestData(cls):
        cls.test_item = SpecificModel.objects.create(data="some data")
Run Code Online (Sandbox Code Playgroud)

specific_tests.py

from .base_tests import TestData

class SubclassOfTestData(TestData):
    # Inherits `setUpTestData`
    pass
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案,当您只有一个 TestData 子类时它可以工作。如果您有两个从 TestData 继承的不同类,那么数据库似乎不会在两个不同类中的测试之间被破坏。这导致 setUpTestData 在数据库中被调用两次,这不是一个(至少我)所期望的。 (2认同)