見出し画像

はじめてのテスト 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時点ではエラーだと認識しないという設定になっているからだと考えます。
公式のドキュメントをいつか見ます。(先延ばしにしてるから見なそう)

いいなと思ったら応援しよう!