2011-08-15 52 views
2

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

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? 

回答

2

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

+0

什么关于我在setUp方法中放入数据库的东西,我猜他们会留在表格中吗? – yasar

+1

那么,'setUp'每个测试运行一次,而不是每个测试用例。所以db被清空,然后setUp再次运行。 –

+0

@ 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