2017.09.03 python第15次笔记

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 datetime
from django.utils import timezone

from .models import Question


class 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 polls
Creating 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.002s

FAILED (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 polls
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
Destroying 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 polls
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
...
----------------------------------------------------------------------
Ran 3 tests in 0.003s

OK
Destroying test database for alias 'default'...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值