Django:跨多个文件拆分测试,但共享相同的数据库?

时间:2015-05-26 09:47:33

标签: python django unit-testing

我正在使用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_listtest_query的文件,并按上述方式为每个setUpModule部分提供了文件。

但是,首先这不是DRY,其次,当我运行python manage.py test时,许多测试都会因重复的外键错误而失败,如:

ProgrammingError: relation "frontend_sha_id" already exists

我想这并不令人惊讶,因为测试试图多次创建测试数据库。

但是,如果我从除第一个测试之外的所有测试中删除setUpModule(按文字名称按字母顺序列出),则其他测试会因为无法查看任何数据而失败。

如何在所有测试运行之前运行setUpModule一次,并且仍然将测试保存在单独的文件中以方便使用?

1 个答案:

答案 0 :(得分:1)

您可以在每个setUpModule课程中使用setUpTestData一次,而不是对两个测试类使用全局TestCase。来自Django documentation: Testing tools

  

类级原子块...允许在类级别创建初始数据,一次为整个TestCase创建。