我正在使用Django 1.8。我一直在一个名为test_api.py
的长文件中为我的Django API编写测试。该文件的结构如下:
def setUpModule():
management.call_command('loaddata', 'frontend/fixtures/data.json',
verbosity=0)
management.call_command('my_custom_command')
def tearDownModule():
management.call_command('flush', verbosity=0, interactive=False)
class TestAPIBNFViews(TestCase):
def test_api_view_list_all(self):
url = '/api/1.0/bnf_code'
# do testing
def test_api_view_query(self):
# more testint
在所有测试运行之前,夹具和管理命令被加载一次,到目前为止,这已经很好了。
现在文件变得冗长而且难以处理,我想将其拆分为多个文件。我创建了多个名为test_list
和test_query
的文件,并按上述方式为每个setUpModule
部分提供了文件。
但是,首先这不是DRY,其次,当我运行python manage.py test
时,许多测试都会因重复的外键错误而失败,如:
ProgrammingError: relation "frontend_sha_id" already exists
我想这并不令人惊讶,因为测试试图多次创建测试数据库。
但是,如果我从除第一个测试之外的所有测试中删除setUpModule
(按文字名称按字母顺序列出),则其他测试会因为无法查看任何数据而失败。
如何在所有测试运行之前运行setUpModule
一次,并且仍然将测试保存在单独的文件中以方便使用?
答案 0 :(得分:1)
您可以在每个setUpModule
课程中使用setUpTestData
一次,而不是对两个测试类使用全局TestCase
。来自Django documentation: Testing tools:
类级原子块...允许在类级别创建初始数据,一次为整个
TestCase
创建。