1. HOME
  2. ブログ
  3. エンジニアになろう!
  4. 【第7回】Djangoで日記アプリを作ろう ~Djangoでテスト実施編~
【第7回】Djangoで日記アプリを作ろう ~Djangoでテスト実施編~

【第7回】Djangoで日記アプリを作ろう ~Djangoでテスト実施編~

【第7回】Djangoで日記アプリを作ろう ~Djangoでテスト実施編~

前回は、Django テンプレート言語について学びました。

今回は、Django のテストについて学んでいきましょう!

この記事では主に、以下の内容を学んでいきます。

  1. テスト実行の流れ
  2. テストの実装方法
  3. テストの出力の意味

テストの実装方法よりも、Django におけるテストの実行の流れに焦点を当てます。

そのフローが理解できれば、あとはテストケースを考え、コードに落とし込むだけです。

Django におけるテストの実装は、Python が標準で提供する、unittest に沿っています。

なので、そこまで目新しいものはありません。

前回の記事

Djnagoにおけるテスト処理の流れ

それではまず、Django における、テストフローの大枠を掴みましょう!

細かいところは、後ほど補足をしていきます。

Django では、テスト用のコマンドを実行すると、下記の流れでテストを実行します。

  1. test.py ファイルより、テストコードを探索
  2. テストで利用するデータベースを作成し、マイグレーションを実施
  3. テストコードを実行
  4. 全テストを実施した後、テスト用データベースを削除(削除せずに残すことも可能)

test.py ファイルよりテストコードを探索

まず、test.py というテスト専用のファイルの中から、実行するテストを探索します。

test.py は、アプリケーションディレクトリの中に配置されています。

diar ディレクトリの中を、確認してみましょう!

test.py が配置されていることが、確認できるはずです。

テスト用のデータベースの作成とマイグレーション

テスト実施に必要な、テスト用データベースを作成しましょう!

次に、models.py の中身を元に、マイグレーションを実施します。

基本的にデータベースは、settings.py の DATABASES の設定を参照して、自動的に作成されます。

つまり、特に何も設定しなくても、テストは実行できるわけですね!

設定が必要となってくるのは、テスト実行後にデータベースを残しておき、その中身を確認したい場合です。

この場合には、テスト用の名前を指定すると、後ほどデータベースへの接続がしやすくなります。

例えば、テスト用データベースの名前を「mytestdb」とする場合、DATABASES 辞書に TEST キーを割り当て、NAME を設定します。

データベースを残す必要性がないのであれば、TEST キーを付与しなくても構いません。

TEST キーを付与しない場合には、Django のデフォルト設定に従います。

このとき、default に設定した NAME に「test_」という接頭語を付けた値が、テスト用データベースの名前になります。

テストコードを実行

テストコードの探索とデータベースの作成が済んだので、いよいよテストを実行します。

なおテストは、django.test モジュールの TestCase を継承したクラスの中で、メソッドとして実装されます。

当然、1つのテスト用クラスの中に、複数のテスト用メソッドを定義することが可能です。

例えば、日記モデル用のテストクラスを作成し、その中に、

  1. 日記データの保存と取得をテストするメソッド
  2. 件数の一致を確かめるメソッド

などを、それぞれ実装していきます。

テスト用のデータベースの削除

全てのテストコードの実行が完了すると、テスト用データベースは削除されます。

データベースを新規作成し、最後に削除を実施するには、データベースの接続ユーザーに「create」と「delete」の権限が付与されている必要があります。

SQLite3 ではなく、PostgreSQL などの他のデータベースを利用している場合、ユーザーに対して付与されている権限に注意しましょう。

テストを実装してみよう

それでは、実際にテストを実装して実行してみましょう。

diary アプリケーションの中の test.py に、日記モデルに関するテストを実施する、DiaryModelTest クラスを作成します。

このコードのポイントは2つ。

ポイント1

1つ目は、DiaryModelTest が TestCase クラスを継承していることです。

このクラスを継承していないと、テスト用のコードとして見なされません。

ポイント2

2つ目は、「test_」から始まるメソッドを定義していることです。

テスト用メソッドは、必ず「test_」という接頭語を付与します。

では、このテストを実行してみます。

以下のコマンドを実行しましょう!

python3 manage.py test

以下のような出力が確認できれば、作成した2件のテストが、無事実行できています。

出力を理解しよう

最後に、テストの出力について、理解を深めましょう。

先ほどの出力は、「2件のテストが成功した」程度の情報しかありませんでした。

ですが、出力のレベルを調整すれば、より深い情報を得られます

以下のコマンドを実行してみましょう。

python3 manage.py test -v 2

すると、以下のような出力が得られるはずです。

まず、mytestdb というデータベースを作成し、マイグレーションが実行されています。

その後、DiaryModelTests クラスに定義された、各種テストメソッドが順番に実行されていますね。

最後に、mytestdb が削除(destroy)され、全ての処理が完了です。

これは、前の章で学んだ、テストの実施フロー通りです。

第8回へつづく!

今回は、Django におけるテストについて学びました!

次回は、django-allauth というライブラリを用いて、認証機能を実装していきます。

次回もお楽しみに!

第8回はこちら!

こちらの記事もオススメ!


書いた人はこんな人

広告メディア事業部
広告メディア事業部
「好きを仕事にするエンジニア集団」の(株)ライトコードです!

ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もり大歓迎!

また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。

以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア