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をもっと学習したいなら...