1、什麼是單元測試
python
單元測試是用來對一個模塊、一個函數或者一個類來進行正確性檢驗的測試工做。若是測試經過則說明咱們這個函數或功能可以正常工做,若是失敗要麼測試用例不正確,要麼函數有bug須要修復。mysql
2、如何使用單元測試sql
from django.test import TestCase from app01.models import * class AuthorTestCase(TestCase): # 測試開始前的工做 def setUp(self): auths = Author.objects.all().values() print(auths) # 測試結束的收尾工做 def tearDown(self): Author.objects.filter(name="Steven").delete() auths = Author.objects.all().values() print(auths) # 本身定義的測試方法,必須以"test_"開頭 def test_insert_data(self): Author.objects.create(name="Steven", hobby="騎行") auths = Author.objects.all().values() print(auths) 輸出: <QuerySet []> <QuerySet [{'name': 'Steven', 'id': 1, 'hobby': '騎行'}]> <QuerySet []>
Django的單元測試實際是基於Python的unittest模塊,「setUp」方法是測試開始前的工做,「tearDown」方法是測試結束的收尾動做,這些方法名都是固定的,不容許隨意修改,裏面內容你也能夠不寫直接「pass」。「test_insert_data」是我本身定義的測試內容,方法名必須以「test_」開頭,能夠任意寫多個自定義測試方法。
數據庫
Django單元測試注意點:
django
1. 對於每個測試方法都會講setUp()和tearDown()方法執行一遍
app
2. Django會在數據庫中自動新建一個測試數據庫來進行數據庫方面的測試,默認在測試完成後銷燬。因此不用擔憂它會影響你實際的生成數據庫!
ide
3、運行單元測試函數
1. 測試項目中全部的應用單元測試
python3 manage.py test
2. 測試項目中單獨的應用測試
python3 manage.py test app01
3. 運行項目中某個應用的測試文件中的一個Case
python3 manage.py test app01.test2.AuthorTestCase
4. 運行項目中某個應用的測試文件中的一個Case中的其中一個測試方法
python3 manage.py test app01.test2.AuthorTestCase.test_insert_data
5. 運行單元測試結束時不自動刪除測試數據庫(保留測試數據庫)
python3 manage.py test app01 --keepdb
# 爲何要有這個呢?若是你有不少測試用例,定義了許多測試方法,那麼每次在作數據庫操做時都會建立數據庫、刪除數據庫,嚴重影響執行效率。這樣咱們就保留測試數據庫,記得下次執行測試時也要帶上--keepdb,否則會提示你刪除上一次的測試數據庫
4、指定測試數據庫的字符集
這是我以前踩過的一個坑,以前用Pycharm寫過的一個項目執行測試沒有任何問題,過幾天從新打開執行單元測試,結果報了字符集錯誤,而後測試數據庫沒有自動刪除。我通過仔細排查,發現自動建立的測試數據庫字符集居然是「latin1」,我數據庫表中有中文,因此直接報錯了。知道錯誤緣由就好辦了,我查詢了官方文檔,在setting.py文件中強制設置測試數據庫字符集是「UTF8」。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xxx', 'USER': 'xxx', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', 'TEST': {'CHARSET': 'utf8', }, } }