はじめてのテスト Python
おはようございます。
つい最近初めて、プログラミングでの「テスト」を体験しました。
この記事は、テストの流れが一体どのようなものかについて書きました。
テストの基本的な流れ (Django)
プログラミングにおいて、テストは非常に重要な役割を果たします。テストを行う際の基本的な流れは以下の通りです。
1. テストケースクラスの作成: TestCase を継承して、テストケースクラスを作成します。
2. テストメソッドの追加: テストケースクラスに、具体的なテストメソッドを追加します。
3. テストデータの作成: リクエストをシミュレーションするためのテストデータを作成します。
4. 結果の確認: assert を使用して、期待した結果が得られるかを確認します。
5. セットアップの調整: 必要に応じて setUp メソッドを調整します。
6. テストの実行: python manage.py test コマンドでテストを実行します。
テストにおける便利な機能
reverse()関数: URLパターンからURLを自動生成するため、テスト時に手書きでURLを記述する必要がありません。
self.client: Djangoの django.test.Client クラスのインスタンスで、ダミーのWebブラウザのように振る舞い、GETやPOSTリクエストに対する適切なレスポンスをテストします。
テストの種類
テストには「正常系」と「異常系」の二つがあります。
正常系: アプリケーションが正常に動作するかを確認します。
異常系: 不正な操作やエラー条件を検出します。
遭遇したバグとその解決策
テスト中に遭遇したバグの一例を共有します。パスワードが短すぎる場合のテストでは、以下のような問題がありました。
def test_failure_post_with_too_short_password(self):
invalid_data = {
"username": "testuser",
"email": "test@test.com",
"password1": "short",
"password2": "short",
}
fields_to_check = ["password1", "password2"]
self.assert_form_errors_on_signup(invalid_data, fields_to_check, error_message="このパスワードは短すぎます。最低 8 文字以上必要です。")
このテストでは、password1 をチェックするとエラーが発生しましたが、password2 のみをチェックすることで解決しました。エラーメッセージは password1 でのチェック時には認識されていないようでした。
def test_failure_post_with_too_short_password(self):
invalid_data = {
"username": "testuser",
"email": "test@test.com",
"password1": "short",
"password2": "short",
}
fields_to_check = ["password2"]
self.assert_form_errors_on_signup(invalid_data, fields_to_check, error_message="このパスワードは短すぎます。最低 8 文字以上必要です。")
原因はまだわかっていないです。
おそらく、password1時点ではエラーだと認識しないという設定になっているからだと考えます。
公式のドキュメントをいつか見ます。(先延ばしにしてるから見なそう)