使用單元測試測試簡單的首頁
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,重復上兩步
使用單元測試測試簡單的首頁