1. ホーム
  2. django

[解決済み] dbなしのdjangoユニットテスト

2022-06-07 12:34:15

質問

db をセットアップせずに django の unittests を書くことは可能でしょうか?db のセットアップを必要としないビジネスロジックをテストしたいのです。そして、dbをセットアップするのは速いのですが、いくつかの状況では本当に必要ではありません。

どのように解決するのですか?

DjangoTestSuiteRunner をサブクラス化し、 setup_databases と teardown_databases のメソッドをオーバーライドして渡せばよいでしょう。

新しい設定ファイルを作成し、 TEST_RUNNER を先ほど作成した新しいクラスに設定します。そして、テストを実行するとき、--settingsフラグで新しい設定ファイルを指定します。

以下は私が行ったことです。

このようなカスタムテストスーツランナーを作成します。

from django.test.simple import DjangoTestSuiteRunner

class NoDbTestRunner(DjangoTestSuiteRunner):
  """ A test runner to test without database creation """

  def setup_databases(self, **kwargs):
    """ Override the database creation defined in parent class """
    pass

  def teardown_databases(self, old_config, **kwargs):
    """ Override the database teardown defined in parent class """
    pass

カスタム設定を作成します。

from mysite.settings import *

# Test runner with no database creation
TEST_RUNNER = 'mysite.scripts.testrunner.NoDbTestRunner'

テストを実行するときは、新しい設定ファイルに --settings フラグをセットして、以下のように実行してください。

python manage.py test myapp --settings='no_db_settings'

更新日:2018年4月

Django 1.8から、モジュール django.test.simple.DjangoTestSuiteRunner は移動した への 'django.test.runner.DiscoverRunner' .

詳細については 公式ドキュメント のカスタムテストランナーに関するセクションをご覧ください。