23

デフォルトでは、Djangoがsqliteバックエンドに対して実行されると、テスト用に新しいメモリデータベースが作成されます。つまり、unittest.TestCaseから派生するすべてのクラスについて、新しいデータベースを取得します。すべてのテストメソッドが実行される前にクリアされるようにこれを変更できますか?

例:Django永続オブジェクトの上に追加の抽象化を提供するマネージャークラスをテストしています。コードはもっと見えます-そのようにはなりません

class TestForManager(unittest.TestCase):
  def testAddingBlah(self):
    manager = Manager()
    self.assertEquals(manager.getBlahs(), 0)
    manager.addBlah(...)
    self.assertEquals(manager.getBlahs(), 1)

  def testAddingBlahInDifferentWay(self):
    manager = Manager()
    self.assertEquals(manager.getBlahs(), 0)
    manager.addBlahInDifferentWay(...)
    self.assertEquals(manager.getBlahs(), 1)

これで、2番目のテストの最初のアサーションは失敗します。これは、データベースの状態がテスト呼び出し間で保持されBlah、データベースにのインスタンスがすでに存在するためです。

4

5 に答える 5

59

使用しdjango.test.TestCaseないでくださいunittest.TestCase。そして、Django のすべてのメジャー バージョンで動作します。

于 2009-01-12T19:59:19.337 に答える
1

メソッドを使用できますtearDown。テストの実行後に呼び出されます。そこにあるすべての Blah を削除できます。

于 2010-12-14T11:11:26.347 に答える
1

それらを2つの異なる機能で作成し、どちらもテスト機能ではありません。最後に、1 つのテスト関数から依存関数を呼び出します。

于 2019-02-21T14:25:49.553 に答える