Start App-Dev from 35.

35からはじめるアプリ開発

  1. HOME
  2. 実践編
  3. Webアプリ開発
  4. Django
  5. DjangoWebアプリ開発(はじめてのテスト)

DjangoWebアプリ開発(はじめてのテスト)

本レッスンのゴール

  • Modelの単体テストコードを実装し、動かし、結果を得る

前提条件

  • Modelの実装が完了していること。

Modelの実装手順については、以下をご参照ください。

全体の流れ

以下の流れで進めます。

  1. 単体テストコードの実装
  2. テスト実行

作業

1. 単体テストコードの実装

今回は、こちらで作成したIncomeCategoryクラス並びに
Incomeクラスの単体テストコードを実装します。確認したい事は次の3点です。

  • 正しくIncomeCategoryに値が設定されるか
  • 正しくIncomeに値が設定されるか
  • IncomeCategoryの指定なしでIncomeを登録できない事

これらをテストするコードを、myapp/tests.pyに以下の様に実装します。

from django.test import TestCase
from django.db.utils import IntegrityError

from .models import IncomeCategory, Income


class IncomeCategoryTestClass(TestCase):
    def test_was_registered_correctly(self):
        income_category = IncomeCategory(name="給与")
        income_category.save()
        self.assertEqual(income_category.name, "給与")


class IncomeTestClass(TestCase):
    def test_was_registered_correctly(self):
        """
        Income : 正常に登録できる。
        """
        income_category = IncomeCategory(name="給与")
        income_category.save()
        income = Income(amount=10000, incomecategoryid=income_category)
        income.save()
        self.assertEqual(income.incomecategoryid.name, "給与")
        self.assertEqual(income.amount, 10000)

    def test_failed_registration(self):
        """
        Income : 登録時にエラーが発生する
        """
        with self.assertRaises(IntegrityError):
            income = Income(amount=10000)
            income.save()
            self.assertEqual(income.amount, 10000)

テストのメソッド名は必ずtestで始めるようにしてください。

以上で、テストコードの実装は完了です。

2. テスト実行

次に、manage.pyのあるディレクトリで、以下のコマンドを実行します。

$ python manage.py test myapp

以下の様に出力されれば、全テストに合格です。

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
...
----------------------------------------------------------------------
Ran 3 tests in 0.005s

OK
Destroying test database for alias 'default'...
Creating test database.. , Destroying test database.. とあるように、
テストの都度、テスト用データベースを別に作成、破棄している事がわかります。
これにより、テストが実際のDBに変更を加える事を防ぎ、
安心して何度でもテストを回す事が出来ます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください