Django 官方文档write your first Django app --5

本文介绍了Django应用的自动化测试,强调了测试的重要性和基础策略。通过编写测试暴露并修复bug,如Question模型中关于未来日期的问题。接着探讨了如何测试View,使用Django的test client模拟用户交互,并展示了如何改进视图以处理未来日期的Question。最后提到了更多测试思路和最佳实践,鼓励开发者深入学习和理解Django测试。

Writing your first Django app, part 5

自动化测试入门

什么是自动化测试?
测试时检查你代码运行状况的常规手段。

测试操作层次有很大区别,有些可能需要处理一些极小的细节(比如特定model方法是否返回期待值?),或是检查软件的所有操作途径(一连串的用户输入是否会返还正确的值?),你可以手动在shell里面检测,输出数据看它是否按相应情况做出更改。

自动化测试有哪些不同呢?你创造一组测试,当你改变你的应用时,你可以检查一下代码是不是像你最初想的一样运行,不需要浪费时间去手动测试。


为什么你需要创建测试?

你可能觉得这不太重要,反正我们的投票应用运行的很好。如果这个应用是你做的最后一个Django程序,那么你可以不学做测试,反之现在是个学习的好机会。

测试能节省你的时间

现在的测试都很简单,大抵是’检查xx是否工作‘之类的。但是在一个复杂的应用里,它的组件间会有很多复杂的交互影响。

对一个组件进行变更会发生一连串意想不到的影响。这时候测试代码可能要测试多大20个不同的变量和返回值看它们是否没有奔溃。

自动化测试更适合这个工作,当哪个玩意发生故障了,自动化测试会协助你找出代码。

有时候测试像个零工琐事,把你从创造力十足的编程工作中拉开去写噪杂和无聊的测试,特别是你的代码运行良好时。

然而,写测试这个任务可比你自己手动测试问题出在哪里要好得多。。。


测试不只是识别问题,更能预防它们

仅仅思考测试的负面是一个大错误

没有测试的话,应用的作用可能会更加晦涩。即使是你自己写的代码,有时你也会不明白它在做什么。

测试可以从内部阐明你的代码,当发生错误时,这部分代码的测试就会报错。


测试能让你的代码更具吸引力

你可能创造了一个很棒的软件,但是如果没有测试的话,你会发现其它的开发者都懒得去它。没有测试,他们不会相信它。‘Jacob Kaplan-Moss’-Django创始人之一 - 曾经说过‘ 没有测试的代码是设计上的败笔 ‘


测试能有助于团队工作

复杂的应用通常是由团队维护的,测试能让你的同僚不会因为疏忽而去破坏你的代码。如果你想靠Django谋一份工作,你必须善于写测试


基础的测试策略

有很多写测试的方法途径。

一些程序员遵循“test-driven development”原则;他们在写代码之前就先写好了测试。

多数情况下,一个新手会先写些代码再决定写些测试。

很多时候,测试都不知道从哪里下手。当然如果你写过几千行的Python代码,做出这个选择会很容易。在这个应用里,可以改变一点东西,然后你就会发现一个bug。


写你的首个测试

我们发现一个bug

Question.was_published_recently()方法里,它判断Question是否是一天之内发布的,如果是就返回True。但是如果Question的pub_date值是未来的某一天呢?

$ python manage.py shell
>>> # 我们创建一个Question实例,把它的pub_date设为30天后
>>> future_question = Question(pub_date=timezone.now() + datetime.timedelta(days=30))
>>> # 还回是最近发布吗?
>>> future_question.was_published_recently()
True

创建一个测试来暴露这个bug

惯例是把应用的测试放在各自应用目录下的tests.ph文件里;测试系统会自动寻找以test开头的文件。

polls/tests.py:

import datetime
from django.utils import timezone
from django.test import TestCase
from .models import Question

class QuestionMethodTests(TestCase):
    def test_was_published_recently_with_future_question(self):
        """ 
        was_published_recently() 当使用未来日期对象的时候,
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值