djangoユニットテスト


djangoのユニットテストはdoc testとunit testの2種類に分けられる.
ここではunit testのみを説明する.
公式ドキュメントです.https://docs.djangoproject.com/en/dev/topics/testing/overview/
ポイントは次のとおりです.
私たちのプロジェクトモジュールにtestを構築します.py(これは重要です.djangoはデフォルトでモジュールのtest.pyファイルをロードしてテストを実行します).定義モジュールはdjangoを継承する.test.TestCase.pythonは、定義したモジュールのtestで始まるメソッドを自動的にロードします.
from django.test import TestCase
from myapp.models import 

Animalclass 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"')

完了後、コマンドを実行
./manage.py test

デフォルトでは、djangoのテストプロセスでテストデータベースが作成され、testが実行されます.テストデータベースを削除します.
データベースの作成に時間がかかるため、卵が痛い場所です.
この場合、2つの解決策があります.
1.メモリ・データベースsqliteを使用します.settings.pyでの構成
if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3',}

これにより、同じようにテストデータベースが作成されますが、時間が少なくなります.
2.djangoのtestrunnerを使用します.settings.pyでの構成
TEST_RUNNER  = 'django.test.runner.DiscoverRunner'

これにより、同じようにデータベースも作成されますが、このデータベースを作成する時間も通話料が非常に少ないです.
3.git hubの上にdjango-test-utilsというプロジェクトがあります.このプロジェクトにはデフォルトのデータベースを多重化する機能がありますが、このコードをインストールしました.この機能を使用すると、モジュールにkeep-databaseという属性のエラーはありません.Googleでもこの問題を言う人がいます.同じように、解決策はありません.だから、この方法は、通じなかった.
 , keep-database ,django 。 keep-database ,  'django.test.runner.DiscoverRunner'  , 。

上記の方法1+方法2を併用した場合,テストデータベースが作成されたが,最終的には通話料の時間が非常に少ないため,この方法の組合せもこの問題を解決した.