Django テスト フレームワークは非常にシンプルです。推奨される方法は、Python 標準ライブラリの Unittest モジュールを使用することです。
テストの作成
Django の単体テストでは、クラスベースのアプローチを使用してテストを定義する Python の Unittest モジュールを使用します。クラス名は django.test.TestCase で、Python の Unittest.TestCase から継承されます。
from django.test import TestCase from myapp.models import Animal class AnimalTestCase(TestCase): def setUp(self): Animal.objects.create(name="lion", sound="roar") Animal.objects.create(name="cat", sound="meow") def test_animals_can_speak(self): """Animals that can speak are correctly identified""" lion = Animal.objects.get(name="lion") cat = Animal.objects.get(name="cat") self.assertEqual(lion.speak(), 'The lion says "roar"') self.assertEqual(cat.speak(), 'The cat says "meow"')
テストを実行するとき、テスト プログラムは、test で始まるすべてのファイル内のすべてのテスト ケース (inittest.TestCase のサブクラス) を検索し、自動的にテスト セットを作成してテストを実行します。
注: テストがデータベース アクセス (モデルの読み取り、クエリ) に基づいている場合は、unittest.TestCase の代わりに django.test.TestCase を使用してテスト クラスを作成する必要があります。
テストの実行
ディレクトリ内のすべてのテストを実行します (すべての test*.py ファイル):
$ python manage.py test
Animals プロジェクトの下のテスト パッケージ内のテストを実行します:
$ python manage.py test Animals.tests
動物プロジェクトでテストを実行します:
$ python manage.py test Animals
テストケースを個別に実行します:
$ python manage.py test Animals.tests.AnimalTestCase
テストを実行ケースを個別にテスト方法:
$ python manage.py test Animals.tests.AnimalTestCase.test_animals_can_speak
テストファイルへのパスを指定します:
$ python manage.py test Animals/
ワイルドカードテストファイル名:
$ python manage . py test --pattern="tests_*.py"
警告リマインダーを有効にする:
$ python -Wall manage.py test
Database
テストにはデータベースが必要で、django はテスト用に別のデータベースを生成します。テストが合格するかどうかに関係なく、すべてのテストが実行されると、テスト データベースは破棄されます。
デフォルトでは、テスト データベースの名前は test_DATABASE_NAME で、DATABASE_NAME は settings.py で構成したデータベース名です。テスト データベースに別の名前を付ける必要がある場合は、settings.py で TEST_DATABASE_NAME の値を指定します。 sqlite3 を使用すると、データベースはメモリ内に作成されます。
データベースが個別に作成されることを除き、テスト ツールは同じデータベース構成 (DATABASE_ENGINE、DATABASE_USER、DATABASE_HOST など) を使用します。テスト データベースを作成したユーザーは DATABASE_USER (設定内) で指定されているため、それを確認する必要があります。 DATABASE_USER には、データベースを作成するための十分な権限があります。
テストの実行順序
すべてのテストがクリーンなデータベースから開始されるようにするため、実行順序は次のとおりです:
1. すべての TestCase サブクラスが最初に実行されます。
2. 他のすべての単体テスト (unittest.TestCase、SimpleTestCase、TransactionTestCase)。
3. その他のテスト (doctest など)
高速テスト
PASSWORD_HASHERS をより高速なアルゴリズムに設定できます:
PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.MD5PasswordHasher', )