26

テスト データベースのセットアップ動作をカスタマイズするのに苦労しています。私は次のことを達成したいと思います:

  • テスト スイートは既存のデータベースを使用する必要があります
  • テスト スイートはデータベースを消去または再作成するのではなく、mysql ダンプからデータをロードする必要があります。
  • データベースはダンプから生成されるため、フィクスチャをロードする必要はありません
  • テストの終了時に、データベースは破棄されるべきではありません

testsuiterunner が作成をバイパスするのに苦労しています。

4

3 に答える 3

4

この TEST_RUNNER は Django 1.3 で動作します

from django.test.simple import DjangoTestSuiteRunner as TestRunner

class DjangoTestSuiteRunner(TestRunner):
    def setup_databases(self, **kwargs):
        pass

    def teardown_databases(self, old_config, **kwargs):
        pass
于 2014-06-06T10:01:22.990 に答える
0

カスタム テスト ランナーを提供する必要があります。

デフォルトでオーバーライドしたいビットdjango.test.runner.DiscoverRunnerは、メソッドDiscoverRunner.setup_databasesDiscoverRunner.teardown_databasesメソッドです。これら 2 つの方法は、テスト データベースの作成と破棄に関係し、一度だけ実行されます。既定で既存のテスト データベースを使用するテスト固有のプロジェクト設定を提供し、これらをオーバーライドして、ダンプ データが読み込まれ、テスト データベースが破棄されないようにする必要があります。

ダンプのサイズと内容によっては、ダンプをデータベースの SQL コマンドライン インターフェイスにパイプするサブプロセスを作成するのが安全な方法かもしれません。そうしないと、カーソルを取得してクエリを直接実行できる場合があります。

フィクスチャのロードを完全に取り除きたい場合は、Django のデフォルトをnoop にオーバーライドされdjango.test.testcases.TestCaseTestCase._fixutre_setupおよびメソッドで拡張するカスタム ベース テスト ケースを提供できます。TestCase._fixutre_teardown

警告: このランナーは、アプリケーションのソース以外のテストを容易にすることを不可能にします。ランナーをカスタマイズして、既存のデータベースへの接続用の特定のエイリアスを作成し、ダンプをロードしてから、そのTestCase._database_namesエイリアスを指すようにオーバーライドするカスタム テスト ケースを提供することができます。

于 2013-09-20T13:52:57.510 に答える