如何在django中为testcase初始化数据库

时间:2014-02-11 03:09:12

标签: django django-tests

在测试用例中,有许多测试函数,所有测试函数都使用相同的数据。

class Mytest(TestCase):
    def init_data(self):
        insert data1
        insert data2
        .....
    def test1:
        do something
    def test2:
        do something
    ....

我应该在哪里调用init_data函数。如果我在所有测试函数中调用该函数,它将多次插入数据并影响结果。我想我可以在第一个测试函数中调用init_data。但是当我编写很多测试函数时,我发现第一个测试函数djang调用并不是我编写的第一个测试函数。那么我应该如何调用init_data()函数或者是否有其他方法来执行此操作。提前谢谢

1 个答案:

答案 0 :(得分:1)

如果您的测试都使用相同的数据,您可以使用fixture(即。用于测试的一堆'假'数据库条目)预填充TestCase。看看Django测试文档 Providing initial data for modelsTest Case documentation

基本上,你的应用程序中有一个 JSON / XML / YAML 文件,其中包含用于测试的初始数据:

[
  {
    "model": "app.somemodel",
    "pk": 1,
    "fields": {
      "somefield": 'data',
      "otherfield": 'otherdata',
    }
  },
  # more test model instances to follow.
]

如果您正在使用 JSON a(上例中的s)并将文件命名为 initial_data.json ,则每次运行测试时都会自动加载它。否则,要指定要为特定TestCase加载哪些灯具,请将文件命名为: special_data.json 并告诉TestCase加载它:

class MyTest(TestCase):
    fixtures = ['special_data',]

    def test1:
        do something
    # etc

希望这有帮助!

我还应该提一下,尽管灯具是一种非常简单的方法,可以为测试目的提供初始数据,但它们有一些缺点。您可能想看看ModelFactoreswhy Carl Meyer thinks you should be using them