Djangoのユニットテスト


一、ユニットテストとは
ユニットテストは、モジュール、関数、またはクラスに対して正確性検査を行うためのテスト作業です.テストに合格した場合は、この関数または機能が正常に動作していることを示します.失敗した場合は、テスト例が正しくないか、関数にバグがある場合は修復する必要があります.
二、ユニットテストの使用方法
from django.test import TestCase
from app01.models import *

class AuthorTestCase(TestCase):

    #  
    def setUp(self):
        auths = Author.objects.all().values()
        print(auths)

    #  
    def tearDown(self):
        Author.objects.filter(name="Steven").delete()
        auths = Author.objects.all().values()
        print(auths)

    #  , "test_" 
    def test_insert_data(self):
        Author.objects.create(name="Steven", hobby=" ")
        auths = Author.objects.all().values()
        print(auths)
        

 :



Djangoのユニットテストは実際にはPythonのunittestモジュールに基づいており、「setup」方法はテスト開始前の作業、「tearDown」方法はテスト終了の終了動作であり、これらの方法名は固定されており、勝手に修正することは許されず、内容は直接「pass」と書かなくてもよい.「test_insert_data」は自分で定義したテスト内容で、メソッド名は「test_」でなければなりません.最初に、複数のカスタムテストメソッドを任意に書くことができます.
Djangoユニットテストの注意点:
    1. テストメソッドごとにsetup()メソッドとtearDown()メソッドを1回実行します.
    2. Djangoは、データベースに自動的にテストデータベースを新規作成してデータベースのテストを行い、デフォルトではテストが完了した後に破棄されます.実際のデータベースの生成に影響を与える心配はありません.
三、運転ユニットテスト
1.テスト項目のすべての応用
python3 manage.py test

2.試験項目における個別の応用
python3 manage.py test app01

3.プロジェクト内のアプリケーションを実行するテストファイルのCase
python3 manage.py test app01.test2.AuthorTestCase

4.プロジェクト内のあるアプリケーションのテストファイルの中の一つCaseの中の一つのテスト方法を実行する
python3 manage.py test app01.test2.AuthorTestCase.test_insert_data

5.ユニットテストの実行終了時にテストデータベースを自動的に削除しない(テストデータベースを保持)
python3 manage.py test app01 --keepdb

どうしてこれがあるの?多くのテスト例があり、多くのテスト方法が定義されている場合は、データベース操作を行うたびにデータベースを作成し、データベースを削除し、実行効率に深刻な影響を及ぼします.これにより、テストデータベースを保持し、次回のテストを実行するときに--keepdbを持参することを忘れないでください.そうしないと、前回のテストデータベースを削除するように要求されます.
四、テストデータベースの文字セットを指定する
これは私が前に踏んだ穴で、前にPycharmで書いたプロジェクトでテストを実行しても問題はなく、数日後に実行ユニットテストを再開した結果、文字セットのエラーが報告され、テストデータベースが自動的に削除されませんでした.よく調べてみると、自動的に作成されたテストデータベースの文字セットが「latin 1」であることがわかりました.私のデータベース表には中国語があるので、直接間違っています.エラーの原因を知っていればやりやすいので、公式ドキュメントを調べてsetting.pyファイルでのテストデータベース文字セットの強制設定は「UTF 8」です.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': '',
        'PORT': '',
        'TEST': {'CHARSET': 'utf8', },
    }
}