2017.09.03 python第15次笔记

来源:互联网 发布:荥经网络花店 编辑:程序博客网 时间:2024/06/05 14:29

0. something

最近去了一趟湖南,前后9天,再加上之前的准备,已经有两周没有好好学习了!要加快学习进度了

  1. 继续看Tutorials,今天看《Part 5: Testing》;
  2. 对网站有一个初步的设计,作出一个基本模型,然后分步设计实施;
  3. 买戒指,尽快!打报告,尽快!

下面开始今天的工作:

1. What are automated tests?

  1. 特定的模型方法是否能返回期望的值?细节
  2. 用户的一系列输入是否产生想要的结果?整体

自动化测试就是你一次创建一个测试集,当你每次对你的app做出修改以后,你都可以使用这个测试集来检查你的代码是否还像你原来希望的那样工作,而不用再去执行耗时的人工测试!

2. Why you need to create tests

So why create tests, and why now?

Tests will save you time

Tests don’t just identify problems, they prevent them

Tests make your code more attractive

Tests help teams work together

3. Basic testing strategies

测试驱动开发:再写代码之前就写好测试!(测试先于代码)

4. Writing our first test

We identify a bug

先用admin创建一个question,这个question的时间为距离今天不止一天的未来。然后再shell里对这个question调用was_published_recently(),结果如下
这里写图片描述
看到结果为True,这不是符合逻辑的结果,也就是一个小bug

Create a test to expose the bug

from django.test import TestCase# Create your tests here.import datetimefrom django.utils import timezonefrom .models import Questionclass QuestionModelTests(TestCase):    def test_was_published_recently_with_future_question(self):        """        :was_published_recently returns False for questions whose pub_date is in the future.:        """        time = timezone.now() + datetime.timedelta(days=30)        future_question = Question(pub_date=time)        self.assertIs(future_question.was_published_recently(), False)

Running tests

E:\python3\Django\mysite>python manage.py test pollsCreating test database for alias 'default'...System check identified no issues (0 silenced).F======================================================================FAIL: test_was_published_recently_with_future_question (polls.tests.QuestionModelTests)----------------------------------------------------------------------Traceback (most recent call last):  File "E:\python3\Django\mysite\polls\tests.py", line 18, in test_was_published_recently_with_future_question    self.assertIs(future_question.was_published_recently(), False)AssertionError: True is not False----------------------------------------------------------------------Ran 1 test in 0.002sFAILED (failures=1)Destroying test database for alias 'default'...

Fixing the bug

def was_published_recently(self):    # return self.pub_date >= timezone.now() - datetime.timedelta(days=1)    now = timezone.now()    return now - datetime.timedelta(days=1) < self.pub_date < now

重新运行测试:

E:\python3\Django\mysite>python manage.py test pollsCreating test database for alias 'default'...System check identified no issues (0 silenced)..----------------------------------------------------------------------Ran 1 test in 0.000sOKDestroying test database for alias 'default'...

More comprehensive tests

def test_was_published_recently_with_old_question(self):    """    was_published_recently() returns False for questions whose pub_date    is older than 1 day.    """    time = timezone.now() - datetime.timedelta(days=1, seconds=1)    old_question = Question(pub_date=time)    self.assertIs(old_question.was_published_recently(), False)def test_was_published_recently_with_recent_question(self):    """    was_published_recently() returns True for questions whose pub_date    is within the last day.    """    time = timezone.now() - datetime.timedelta(hours=23, minutes=59, seconds=59)    recent_question = Question(pub_date=time)    self.assertIs(recent_question.was_published_recently(), True)

运行结果:

E:\python3\Django\mysite>python manage.py test pollsCreating test database for alias 'default'...System check identified no issues (0 silenced)....----------------------------------------------------------------------Ran 3 tests in 0.003sOKDestroying test database for alias 'default'...