今回は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 件のコメント:
コメントを投稿