2013年9月12日木曜日

DjangoとSQLiteを使ったサンプルアプリ:テスト編

前回はDjangoアプリで公開用画面の作り方をご紹介しました。
今回はDjangoアプリテスト方法をご紹介します。(今回使用したDjangoのバージョンは 1.4.5 です)

まずは前回作ったアンケート調査アプリ(Polls)の models.py にテスト対象のメソッドを適当に追加してみます。

~/mysite/polls/models.py
# coding: UTF-8
from django.db import models

class Poll(models.Model):
  question = models.CharField(max_length=200)
  pub_date = models.DateTimeField('date published')
  def __unicode__(self):
    return self.question
    
  '''
  test対象メソッド
  '''
  def hoge_method(self):
    return True
    
class Choice(models.Model):
  poll = models.ForeignKey(Poll)
  choice_text = models.CharField(max_length=200)
  votes = models.IntegerField(default=0)
  def __unicode__(self):
    return self.choice_text
Pollクラスに hoge_method() という True を返すだけのテキトーなメソッドを追加してみました。


tests.py


次に hoge_method() をテストするために tests.py (テスト用ファイル)を編集しましょう。

~/mysite/polls/tests.py
# coding: UTF-8
from django.test import TestCase

from polls.models import Poll

class PollMethodTests(TestCase):

  def test_hoge_method(self):
    poll = Poll()
    self.assertEqual(poll.hoge_method(), True)
もしも hoge_method() が True を返さなければアサーション・エラーを返すように仕込んでおきました。


テスト実行


~/mysite/ で python manage.py test polls を実行すればテストが開始されます。

~/mysite$ python manage.py test polls
  Creating test database for alias 'default'...
  .
  ----------------------------------------------------------------------
  Ran 1 test in 0.001s

  OK
  Destroying test database for alias 'default'...
はい、テストは成功です。

念のため、わざとテストに失敗させてみましょう。
tests.py の self.assertEqual(poll.hoge_method(), True) を self.assertEqual(poll.hoge_method(), False) に書き換えて、testを実行してみます。

~/mysite$ python manage.py test polls
  Creating test database for alias 'default'...
  F
  ======================================================================
  FAIL: test_hoge_method (polls.tests.PollMethodTests)
  ----------------------------------------------------------------------
  Traceback (most recent call last):
      File "/home/at/mysite/polls/tests.py", line 10, in test_hoge_method
          self.assertEqual(poll.hoge_method(), False)
  AssertionError: True != False

  ----------------------------------------------------------------------
  Ran 1 test in 0.001s

  FAILED (failures=1)
  Destroying test database for alias 'default'...
ちゃんとアサーション・エラーが発生していますね。

0 件のコメント:

コメントを投稿