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