【入門】Django/tests.pyの書きかたとテスト実行のやりかた【重要】

tests.pyを使いこなせるようになれば、質の高いWebアプリを作成可能。

今回はDjangoのWebアプリで必須なtests.pyの書きかたとテストを実行するやりかたを紹介していきます。

tests.pyの書きかた

from django.test import TestCase

class ExampleTests(TestCase):

    def setUp(self):
        -- 最初に設定したい内容(なくてもOK) --

    def test_examples(self):
        -- テストしたい内容 --

・setUpって?
最初に実行されるコード。__init__と同じ感じ

・defを書く時の注意
名前をtestからはじめること。testの文字がないと処理が実行されない。何個でも書いてOK。ただ増えすぎるとテスト時間が長くなるデメリット

・実際のテスト例(ステータスコードの取得)

from django.test import TestCase

class ResponseTests(TestCase):

    def setUp(self):
        self.response = self.client.get(reverse('example'))

    def test_examples_get_status_code(self):
        self.assertEqual(self.response.status_code, 200)
  • 6行目...getレスポンスでexampleという名前のURLを取得
  • 9行目...assertEqualでレスポンスのステータスコードが200か確認

getかpostでレスポンスを確認したあと、assert~でテスト判断。基本的にreturnは使わない。

・viewテストで使う2つのコード
テストしたいviewがgetなのかpostなのか判断してテストすることが可能。

  • self.client.get(テストしたいURL)
  • self.client.post(テストしたいURL, POST送信するデータ)

テストで判断するもの

  • self.assertEqual()
  • self.assertTrue()
  • self.assertRedirects()

基本的にassert~でテストが成功したか失敗したか判断をします。

・self.assertEqual(判断するもの(A), 比較したいもの(B))
A==Bでテスト成功

・self.assertTrue(判断するもの(C))
C==Tureでテスト成功

・self.assertRedirects(レスポンス, リダイレクト先URL(D))
D==リダイレクト先URLでテスト成功

・テスト判断用assert一覧サイト
unittest --- ユニットテストフレームワーク — Python 3.9.1 ドキュメント

tests.pyのテスト実行のやりかた

・すべてをテスト実行したい場合

python manage.py test アプリ名

・tests.py内のクラスをテスト実行したい場合

python manage.py test アプリ名.tests.クラス名

・tests.py内のメソッドをテスト実行したい場合

python manage.py test アプリ名.tests.クラス名.メソッド名

Djangoをもっと学習したいなら...

あなた向け今まさに「きれいなコードを書かなくちゃ...」と考えているあなたへ。