2011-08-15 12 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'は、テストケースごとではなく、テストごとに1回実行されます。データベースが空になると、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を参照)