使用单元测试测试简单的首页
Django鼓励以应用的形式组织代码。这样一个项目中可以放多个应用
为待办事项清单创建第一个应用:
manage.py startapp Lists
会在superList文件夹中创建子文件夹Lists,并在lists中创建一些占位文件,用来保存模型,视图以及测试。
功能测试站在用户的角度从外部测试应用,单元测试站在程序员的角度从内部测试应用。
TDD同时使用这两种类型测试应用,工作流程:
1.先写功能测试,从用户角度描述应用的新功能。
2. 功能测试失败后,想办法编写代码让它通过。(或者至少让当前失败的测试通过)。此时,使用一个或多个单元测试定义希望代码实现的效果。保证为应用中的每一行代码(至少)编写一个单元测试。
3. 单元测试失败后,编写最少量的应用代码,刚好让单元测试通过。有时要在第2步和第3步之间多次往复,直到我们觉得功能测试有一点进展为止
4. 再次运行功能测试,看能否通过,或者有没有一点进展。这一步可能促使我们编写一些新的单元测试和代码等。
整个过程中,功能测试站在高层驱动开发,而单元测试从底层驱动我们做些什么。
功能测试的作用是帮助你开发具有所需功能的应用,还能保证你不会无意中破坏这些功能。单元测试的作用是帮助你编写简洁无措的代码。
Django 有自己专用的,写unit test的类 from django.test import TestCase
TDD x循环要从失败的测试开始,然后编写代码让其通过。
Django中的MVC,URL 和视图函数.
视图更像是控制器,模板才是视图。
其主要任务是决定用户访问网站中的某个URL时做些什么。
Django 的工作流程:
1. 针对某个URL的HTTP请求进入
2. Django使用一些规则决定由哪个视图函数处理这个请求 (这一步叫做 解析URL)
3. 选中的视图函数处理请求,然后返回HTTP响应。
先测试两件事:
1. 能否解析网站根路径 (“/"), 将其对应到我们编写的某个视图函数上
from django.core.urlresolvers impor resolve
found = resolve("/") #解析 url,并将其映射到相应的视图函数上
# TDD 目前没有响应的视图函数。根据TDD失败,在应用的视图文件中定义视图函数.
2. 能否让视图函数返回一些HTML
#TDD 定义的视图函数要返回 HTML 给request
运行测试,根据TDD定义 视图函数。运行测试,发现404 error.说明 没有相应的URL映射。
project的文件夹下的urls,py 中定义如何把URL映射到视图函数上。这个文件应用于整个网站.
from django.conf.urls import url,patterns,include
三种加url的例子。Django urls.py 文件中自带的事例。URL 文件中,每个url 都需要对应的视图处理函数
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
为视图编写测试函数:
需要定义一个函数,向浏览器返回真正的HTML响应.
给视图函数输入一个request, 返回response. 然后检查response.content的内容。对比response.content的内容时,主要使用 b"xxx".因为response.content是原始字节。
from django.http import HttpRequest
通过单元测试,一步步进行,视图函数需要返回response object
from django.http import HttpResponse
def home_page(request):
return HttpResponse(xxx)
回顾:
创建新应用 : manage.py startapp appname
Django 单元测试运行程序: from django.test import TestCase
功能测试和单元测试的区别: 用户和程序员
Django 解析URL 的方法, urls.py 文件的作用. : url(pattern,view,name)
Django 的视图函数,请求和响应对象。 HttpRequest,HttpResponse
如何返回简单的HTML return HttpResponse(xxx)
有用的命令和概念:
python manage.py runserver
python functional_test.py 运行功能测试
python manage.py test 运行单元测试
单元测试/编写代码 循环:
a, 在终端里运行单元测试
b,在编辑器中改动最少量的代码
c,重复上两步