2012-02-24 13 views
3

django用にsqliteを使用する場合は、ソース管理からアプリケーションをチェックアウトし、特別な処理を行うことなくユニットテストを実行できます。しかし、あなたがあなたのデータベースとしてmysqlを使うことに突然変わると、あなたはデータベースを作成する必要があります。なぜ私はこれを行う必要がありますか?単体テストでもそのデータベースを使用しないので、これは特に奇妙です。代わりに、名前に 'test_'という接頭辞を付けて独自のテストを作成します。djangoはなぜテストを実行するためにmysqlデータベースを作成する必要がありますか?

答えて

1

これは、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/

+1

私は別の設定ファイルを持っています。データベースは、私が配備しているデータベースエンジンに対してテストしたいほど十分に異なるので、sqliteの代わりにmysqlをテスト用に使用します。 – guidoism

+0

mysqlとpostgresを使用するためのデータベースを作成する必要があります。 sqlliteでは、データベース(db)への接続を行うときに( 'database')それが存在しなければ作成されます。 unittest中に、ユニットテストが完了したらテーブル内のテーブルを分解して、データベース内に独自のテーブルを作成します。 –

+0

ええ、私はそれを得るが、質問は:なぜですか? – guidoism

1

あなたがテストを実行した場合、頻繁にあなたのsettings.pyに次のコードを置く:

import sys 

if 'test' in sys.argv: 
    DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': 'test' 
    } 
} 
+0

まだ問題は解決していませんが、これはsqliteに対してテストしています。これは、私たちがデプロイしていないもので、実際には良いテストではありません。しかし、存在しない場合には、settings.pyやmanage.pyをハッキングしてdbを作成するとうまくいくかもしれません。 – guidoism

+0

重要ではありません。純粋なdjangoを使用している場合は、DBバックエンドが変更され、サイトが正常に動作するはずです。 – santiagobasulto

+0

SQliteはunittestsのMySQLより100倍高速です。 – sbaechler

1

私はテストのために、ほぼ同じソリューションを使用して、 @SimonBächlerのように、実際のデータベースの代わりに

'NAME': 'test', 

は、私はそれがテスト動作を処理するためにメモリを使用し、それは常にデシベルを削除/作成/更新しない理由thatsの

'NAME':' :memory:, 

を使用しています。