Djangoのユニットテスト
2678 ワード
一、ユニットテストとは
ユニットテストは、モジュール、関数、またはクラスに対して正確性検査を行うためのテスト作業です.テストに合格した場合は、この関数または機能が正常に動作していることを示します.失敗した場合は、テスト例が正しくないか、関数にバグがある場合は修復する必要があります.
二、ユニットテストの使用方法
Djangoのユニットテストは実際にはPythonのunittestモジュールに基づいており、「setup」方法はテスト開始前の作業、「tearDown」方法はテスト終了の終了動作であり、これらの方法名は固定されており、勝手に修正することは許されず、内容は直接「pass」と書かなくてもよい.「test_insert_data」は自分で定義したテスト内容で、メソッド名は「test_」でなければなりません.最初に、複数のカスタムテストメソッドを任意に書くことができます.
Djangoユニットテストの注意点:
1. テストメソッドごとにsetup()メソッドとtearDown()メソッドを1回実行します.
2. Djangoは、データベースに自動的にテストデータベースを新規作成してデータベースのテストを行い、デフォルトではテストが完了した後に破棄されます.実際のデータベースの生成に影響を与える心配はありません.
三、運転ユニットテスト
1.テスト項目のすべての応用
2.試験項目における個別の応用
3.プロジェクト内のアプリケーションを実行するテストファイルのCase
4.プロジェクト内のあるアプリケーションのテストファイルの中の一つCaseの中の一つのテスト方法を実行する
5.ユニットテストの実行終了時にテストデータベースを自動的に削除しない(テストデータベースを保持)
どうしてこれがあるの?多くのテスト例があり、多くのテスト方法が定義されている場合は、データベース操作を行うたびにデータベースを作成し、データベースを削除し、実行効率に深刻な影響を及ぼします.これにより、テストデータベースを保持し、次回のテストを実行するときに--keepdbを持参することを忘れないでください.そうしないと、前回のテストデータベースを削除するように要求されます.
四、テストデータベースの文字セットを指定する
これは私が前に踏んだ穴で、前にPycharmで書いたプロジェクトでテストを実行しても問題はなく、数日後に実行ユニットテストを再開した結果、文字セットのエラーが報告され、テストデータベースが自動的に削除されませんでした.よく調べてみると、自動的に作成されたテストデータベースの文字セットが「latin 1」であることがわかりました.私のデータベース表には中国語があるので、直接間違っています.エラーの原因を知っていればやりやすいので、公式ドキュメントを調べてsetting.pyファイルでのテストデータベース文字セットの強制設定は「UTF 8」です.
ユニットテストは、モジュール、関数、またはクラスに対して正確性検査を行うためのテスト作業です.テストに合格した場合は、この関数または機能が正常に動作していることを示します.失敗した場合は、テスト例が正しくないか、関数にバグがある場合は修復する必要があります.
二、ユニットテストの使用方法
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', },
}
}