【发布时间】:2015-08-07 22:07:24
【问题描述】:
我正在使用 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,并且仍将测试保存在单独的文件中以方便使用?
【问题讨论】:
-
快速而肮脏的解决方案:在运行数据库创建之前,您可以在每个文件中检查它是否已经存在。
-
我想我可以拥有一个名为
test_all.py的文件,然后我可以将其他所有内容作为模块导入...这样行吗?
标签: python django unit-testing