在Python unittest中创建一个昂贵的对象以在所有测试中共享

在Python unittest中创建一个昂贵的对象以在所有测试中共享,python,python-unittest,Python,Python Unittest,我正在尝试为我的数据库应用程序编写测试。现在这是我的结构: application_files test/ __init__.py test1.py test2.py 我想创建一个临时数据库一次,并希望所有测试都使用该数据库。在\uuuu init\uuuuu.py中,我有以下内容: __init__.py: class ApplicationTestCase(TestCase): @classmethod def setUpClass(self):

我正在尝试为我的数据库应用程序编写测试。现在这是我的结构:

application_files
test/
    __init__.py
    test1.py
    test2.py
我想创建一个临时数据库一次,并希望所有测试都使用该数据库。在
\uuuu init\uuuuu.py
中,我有以下内容:

__init__.py:

class ApplicationTestCase(TestCase):
    @classmethod
    def setUpClass(self):
        create_database()

    def setUp(self):
        clear_database()

    @classmethod
    def tearDownClass(self):
        kill_database()
在test1.py中:

from . import ApplicationTestCase

class TestObject1(ApplicationTestCase):
    def __init__(self, *args, **kwargs):
        super(self.__class__, self).__init__(*args, **kwargs)

    def do_test_a(self):
        whatever()

    def do_test_b(self):
        whatever()
test2.py与test1.py几乎相同


目前,为test1和test2创建并删除了我的临时数据库。我只希望它被创建然后删除一次。我尝试在
\uu init\uuuuuuuupy.py中添加
def setUpModule():
,但该函数似乎一点也没有被触及。

我在每个测试文件中都成功地使用了setUpModule/tearDownModule,也许可以尝试一下,至少应该减少创建/删除数据库的次数。您的意思是在test1.py和test2.py中添加setUpModule/tearDownModule吗?我刚刚尝试了这个,它仍然创建了两次数据库。但是如果它真的起作用,我觉得它违背了使用测试框架的目的。我不应该在每个测试文件中都有相同的setUpModule/tearDownModule调用。是否有可能将依赖于数据库的所有测试放在一个文件中,或者您是否看到特定于数据库的测试膨胀?您必须从这两个测试手动创建一个测试套件,并手动创建一个测试运行程序来设置和拆除数据库。确保您的测试在数据库中不相交的数据集上运行。@Dan您有我能看到的示例吗?我在每个测试文件中都成功地使用了setUpModule/tearDownModule,也许可以尝试一下,至少它会减少创建/删除数据库的次数。您的意思是在test1.py和test2.py中添加setUpModule/tearDownModule吗?我刚刚尝试了这个,它仍然创建了两次数据库。但是如果它真的起作用,我觉得它违背了使用测试框架的目的。我不应该在每个测试文件中都有相同的setUpModule/tearDownModule调用。是否有可能将依赖于数据库的所有测试放在一个文件中,或者您是否看到特定于数据库的测试膨胀?您必须从这两个测试手动创建一个测试套件,并手动创建一个测试运行程序来设置和拆除数据库。确保您的测试在数据库中不相交的数据集上工作。@Dan您有我能看到的示例吗?