【问题标题】:Django testing execution order and tablesDjango 测试执行顺序和表格
【发布时间】:2011-08-15 12:13:29
【问题描述】:

在测试执行并更改测试数据库表的情况下,每次测试后数据库表会恢复到原始状态吗?如果不是,我应该如何知道测试的执行顺序,以便预测数据库表的状态。例如,

class SimpleTest(Testcase):
    def test_insert(self):
        # testing to see if data correctly added to database

    def test_other_thing(self):
        # does insered data available here?

【问题讨论】:

    标签: django unit-testing testing


    【解决方案1】:

    数据库在每次测试结束时回滚。

    【讨论】:

    • 我在 setUp 方法中放入数据库的东西怎么样,我猜它们会留在表中吧?
    • 好吧,setUp 每个测试运行一次,而不是每个测试用例。所以 db 被清空,然后 setUp 再次运行。
    • @yasar11732,数据库回滚后,在下次测试前再次运行setUp
    【解决方案2】:

    为了正确的测试隔离,当测试涉及数据库时,您需要从 django.test.TestCase 继承,它处理一个测试执行与另一个测试执行之间的数据库状态隔离。

    永远,永远,依赖于测试执行顺序:如果你需要,你做错了,因为你违反了测试隔离。

    请记住,您不需要只使用 unittest.TestCase 或只使用 django.test.TestCase:您可以根据需要混合使用它们(如果您的测试不涉及数据库,则不需要后者)。

    请注意,django.test.TestCase 在每次测试后使用事务来加速数据库状态清理,因此如果您需要实际测试数据库事务,则需要使用 django.test.TransactionTestCase(参见https://docs.djangoproject.com/en/dev/topics/testing/#testcase)

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2021-06-22
      • 1970-01-01
      • 2011-02-09
      相关资源
      最近更新 更多