2011-08-15 375 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