0

Django でデータベースをセットアップしている場合、TestRunnersettings.pyに一時的なテスト データベースで実行する代わりに、( の DATABASE_* 設定に従って) 'ライブ' データベースを使用させるにはどうすればよいでしょうか。

liveたとえば、で指定されたデータベースで次のテストを実行したいと思いますsettings.py

import unittest

from example import models

class DBDriverTest(unittest.TestCase): 
    db testDriver(self):
       "Connect to the live database and drop in sample value."
       m = models.MyModel('hello')
       m.save() # ... save to the live database from settings.py

現在、上記のコードは、構築されたテスト データベースにのみ保存されます。私のアプリケーションにはデータベース上で動作する複数の並列プロセスがあるため、これは非常に制限的です。また、「ライブ」データベースに物事を送り込み、短いスリープ後にそれらがどこにあるかを確認する機能がなければ、単体テストは不完全になります (そして一貫性がなくなります)。

私が考えることができる2つの潜在的なオプションは次のとおりです。

  1. Django API をプラグインして、settings.py でデータベースに「手動で」接続する方法を見つけます。

  2. 「ライブ」データベースへの低レベル接続を作成し、手動で入力します

前者は、Django のパブリック API の下にあるものに依存するため、問題があります。後者は、データベースにとらわれない Django データベース API を放棄し、より手作業が必要になるため、問題があります。

あなたの考えと意見に感謝します。

ブライアン

4

1 に答える 1

2

test_runner tearDownすべてのテストが独立して実行され、実行ごとにデータベースがクリアされるため、独自のメソッドを定義する必要があります。あなたが求めていることは、あなた自身test_runnerのそこから何かを削除するのではなく、データベース全体を手動で削除します;-) これはとても楽しかったです。

あなたの質問に答える:独自のメソッドを作成し、作成したオブジェクトのみを削除するtest_runner独自のメソッドを作成する準備をします。tearDown何らかの方法でそこに保存する必要があるprimary keysため、ライブ データベースからは何も削除されません。

ただし、これは良い方法ではないと思います。ライブデータベースでテストを実行すると、災害が発生する可能性があります。遅かれ早かれ、これで問題が発生します。代わりにすべきことは、ライブ データベースをダンプし、このデータからフィクスチャを準備して、テストで使用することです。これは十分に文書化されており、簡単に実行できます。このようにして、貴重なデータを危険にさらすことなくライブ環境が得られ、独自のtest_runner. 私の意見では、これが最善かつ最も安全な方法です。

于 2010-03-04T18:57:28.187 に答える