django用にsqliteを使用する場合は、ソース管理からアプリケーションをチェックアウトし、特別な処理を行うことなくユニットテストを実行できます。しかし、あなたがあなたのデータベースとしてmysqlを使うことに突然変わると、あなたはデータベースを作成する必要があります。なぜ私はこれを行う必要がありますか?単体テストでもそのデータベースを使用しないので、これは特に奇妙です。代わりに、名前に 'test_'という接頭辞を付けて独自のテストを作成します。djangoはなぜテストを実行するためにmysqlデータベースを作成する必要がありますか?
答えて
これは、Djangoがテストスイートを実行するためのsettings.pyファイルをロードするためです。個別のsettings.pyファイルを作成し、テストを実行するときに使用することができます。 Djangoのサイトからの例として:あなたはtest_sqliteと呼ばれるsettings.pyファイルを持っていたと仮定し
--settings=test_sqlite
。詳細については、こちらを
ゴー:
https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/
あなたがテストを実行した場合、頻繁にあなたのsettings.pyに次のコードを置く:
import sys
if 'test' in sys.argv:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'test'
}
}
まだ問題は解決していませんが、これはsqliteに対してテストしています。これは、私たちがデプロイしていないもので、実際には良いテストではありません。しかし、存在しない場合には、settings.pyやmanage.pyをハッキングしてdbを作成するとうまくいくかもしれません。 – guidoism
重要ではありません。純粋なdjangoを使用している場合は、DBバックエンドが変更され、サイトが正常に動作するはずです。 – santiagobasulto
SQliteはunittestsのMySQLより100倍高速です。 – sbaechler
私はテストのために、ほぼ同じソリューションを使用して、 @SimonBächlerのように、実際のデータベースの代わりに
'NAME': 'test',
は、私はそれがテスト動作を処理するためにメモリを使用し、それは常にデシベルを削除/作成/更新しない理由thatsの
'NAME':' :memory:,
を使用しています。
私は別の設定ファイルを持っています。データベースは、私が配備しているデータベースエンジンに対してテストしたいほど十分に異なるので、sqliteの代わりにmysqlをテスト用に使用します。 – guidoism
mysqlとpostgresを使用するためのデータベースを作成する必要があります。 sqlliteでは、データベース(db)への接続を行うときに( 'database')それが存在しなければ作成されます。 unittest中に、ユニットテストが完了したらテーブル内のテーブルを分解して、データベース内に独自のテーブルを作成します。 –
ええ、私はそれを得るが、質問は:なぜですか? – guidoism