编写测试程序
发现BUG
在Question.was_published_recently()方法的返回值中, 我们的需求是最近的一天发布的时候返回True, 然而在未来的日期发布的时候也返回True.
创建一个测试发现这个BUG
import datetime
from django.test import TestCase
from django.utils import timezone
from .models import Question
class QuestionMethodTests(TestCase):
def test_was_published_recently(self):
time = timezone.now() + datetime.timedelta(days=30)
future_question = Question(pub_date = time)
self.assertIs(future_question.was_published_recently(), False)
运行测试程序
python manage.py test polls
执行流程
- python manage.py test polls命令会查找投票应用中所有的测试程序
- 发现一个django.test.TestCase的子类
- 为测试创建一个专用的数据库
- 查找名字以test开头的测试方法
- 在test_was_published_recently_with_future_question方法中,创建一个Question实例,该实例的pub_data字段的值是30天后的未来日期。
- 然后利用assertIs()方法,它发现was_published_recently()返回了True,而不是我们希望的False。