gpt4 book ai didi

python - 继承为每个 child 调用的 Django SetUpTestData 方法

转载 作者:行者123 更新时间:2023-12-05 05:44:33 26 4
gpt4 key购买 nike

继承母类使其类方法 setUpTestData 为每个子类调用。这是我异常(exception)但不是我想要的。

这是一个极简主义的例子

from django.test import TestCase


class ParentClass(TestCase):
@classmethod
def setUpTestData(cls):
cls.parent_attr = "parent value"
print("ParentClass.setUpTestData called") # this is called twice


class TestChild1(ParentClass):
@classmethod
def setUpTestData(cls):
super(TestChild1, cls).setUpTestData()
cls.child_attr = "child value 1"

def test_child(self):
self.assertEqual(self.parent_attr, "parent value")
self.assertEqual(self.child_attr, "child value 1")


class TestChild2(ParentClass):
@classmethod
def setUpTestData(cls):
super(TestChild2, cls).setUpTestData()
cls.child_attr = "child value 2"

def test_child(self):
self.assertEqual(self.parent_attr, "parent value")
self.assertEqual(self.child_attr, "child value 2")

$ python manage.py test accounts.tests.test_test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
ParentClass.setUpTestData called
.ParentClass.setUpTestData called
.
----------------------------------------------------------------------
Ran 2 tests in 0.006s

OK
Destroying test database for alias 'default'...

我希望能够创建许多子类,其中每个子类都会对公共(public)“继承”数据库进行微小的修改。但是我不想多次运行父类方法,因为它非常慢。

如何确保只生成一次父数据库,并且每个子类都在父数据库的副本上工作,而不是重新生成整个数据库。

最佳答案

正如您自己所说,@brian-destura 也指出,在测试类之间共享数据的最佳选择是实现您自己的测试运行程序。

运行者应该继承自django.test.runner.DiscoverRunner。在该运行者中,您可以根据需要覆盖 setup_test_environment() ( docs ) 或 setup_databases() ( docs )。

关于python - 继承为每个 child 调用的 Django SetUpTestData 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71584564/

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