サイドバーの「Django ドキュメント検索」というプレースホルダの入った検索では、Django ドキュメント (Django 2.1) の公式サイト内を検索できます

はじめに

Django を学習するには、何はともあれ公式チュートリアル「はじめての Django アプリ作成」からスタートしてみるのが良いでしょう。しかし、いざチュートリアル通りに進めようとしても躓く場合も多いと思います。そこで、「チュートリアルの進め方」シリーズとして、チュートリアルに沿った作業を行いながら補足事項をまとめることにしました。チュートリアルで躓いた際のヒントとしてお使いください。

利用環境は Ubuntu、 Linux Mint を中心として説明しますが、 Windows についても補足します。

前回は、Django チュートリアルの進め方 その 4 (2) と題してはじめての Django アプリ作成、その 4の後半についてまとめました。

今回は、はじめての Django アプリ作成、その 5 の前半についてまとめました。

初めてのテスト作成

バグを見つけたとき

公開日が未来の日付であった場合に、was_published_recently() がどのような動作をするか shell で確認します。


5行目で、30日後の公開日の Question を作成しています。

was_published_recently() は「最近公開された質問か?」を判断するメソッドですが、30日後に公開される (まだ公開されていない) 予定の質問に対して True を返してしまっています。つまりバグです。

バグをあぶり出すためにテストを作成する

shell でテストした内容をテストコードにします。
polls/tests.py に下記を記述します。

TestCase を継承したクラスに、test で始まるメソッドを追加。メソッド中で評価用のメソッド (ここでは assertIs()) を実行。という手順です。
django.test.TestCase は Python の標準のユニットテストクラスである TestCase を拡張したものです。基本的な使い方は unittest.TestCase のリファレンスを参照してください。下記は、主な検査用メソッドの抜粋です。

メソッド 確認事項
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)

テストの実行

テストを実行します。(manage.py test アプリケーション名)

バグを修正する

was_published_recently() が未来日付で True を返さないように修正します。

再度テストを実行します。

より包括的なテスト

テストを完成させます。

公開日が前日より前、前日以降、未来の3パターンでテストするようにしています。

再度テストを実行してみます。

3つのテストすべて合格した事がわかります。

今回はテストの基本についてまとめました。次回は はじめての Django アプリ作成、その 5 の後半、ビューのテストについてまとめます。

参考

低価格なのに高速・多機能・高セキュリティ 月額400円(税別)から最大容量100GB WordPress専用高速サーバー Z.com WP
おすすめの記事