在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您有我能看到的示例吗?