為什麼要測試?
web程式開發過程一般包括以下幾個階段:[需求分析,設計階段,實現階段,測試階段]。其中測試階段通過人工或自動來執行測試某個系統的功能。目的是檢驗其是否滿足需求,並得出特定的結果,以達到弄清楚預期結果和實際結果之間的差別的最終目的。
測試的分類:
測試從軟體開發過程可以分為:單元測試、整合測試、系統測試等。在眾多的測試中,與程式開發人員最密切的就是單元測試,因為單元測試是由開發人員進行的,而其他測試都由專業的測試人員來完成。所以我們主要學習單元測試。
什麼是單元測試?
程式開發過程中,寫**是為了實現需求。當我們的**通過了編譯,只是說明它的語法正確,功能能否實現則不能保證。 因此,當我們的某些功能**完成後,為了檢驗其是否滿足程式的需求。可以通過編寫測試**,模擬程式執行的過程,檢驗功能**是否符合預期。
單元測試就是開發者編寫一小段**,檢驗目標**的功能是否符合預期。通常情況下,單元測試主要面向一些功能單一的模組進行。
舉個例子:一部手機有許多零部件組成,在正式組裝一部手機前,手機內部的各個零部件,cpu、記憶體、電池、攝像頭等,都要進行測試,這就是單元測試。
在web開發過程中,單元測試實際上就是一些「斷言」(assert)**。
斷言就是判斷乙個函式或物件的乙個方法所產生的結果是否符合你期望的那個結果。 python中assert斷言是宣告布林值為真的判定,如果表示式為假會發生異常。單元測試中,一般使用assert來斷言結果。
斷言方法的使用:
斷言語句類似於:
if not expression:
raise assertionerror
常用的斷言方法:
assertequal 如果兩個值相等,則pass
assertnotequal 如果兩個值不相等,則pass
asserttrue 判斷bool值為true,則pass
assertfalse 判斷bool值為false,則pass
assertisnone 不存在,則pass
assertisnotnone 存在,則pass
如何測試?
簡單的測試用例:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597www.cppcns.com,2584,4181,6765,
def fibo(x):
if x == 0:
resp = 0
elif x == 1:
resp = 1
else:
return fibo(x-1) + fibo(x-2)
return resp
assert fibo(5) == 5
單元測試的基本寫法:
首先,定義乙個類,繼承自unittest.testcase
import unittest
class testclass(unitest.testcase):
pass
其次,在測試類中,定義兩個測試方法
import unittest
class testclass(unittest.testcase):
#該方法會首先執行,方法名為固定寫法
def setup(self):
pass
#該方法會在測試**執行完後執行,方法名為固定寫法
def teardown(self):
pass
最後,在測試類中,編寫測試**
import unittest
class testclass(unittest.testcase):
#該方法會首先執行,相當於做測試前的準備工作
def setup(self):
pass
#該方法會在測試**執行完後執行,相當於做測試後的掃尾工作
def teardown(self):
pass
#測試**
def test_app_exists(self):
pass
傳送郵件測試:
#coding=utf-8
import unittest
from flask_day04 import app
class testcase(unittest.testcase):
# 建立測試環境,在測試**執行前執行
def setup(self):
self.app = app
# 啟用測試標誌
app.config['testing'] = true
self.client = self.app.test_client()
# 在測試**執行完成後執行
def teardown(self):
pass
# 測試**
def test_email(self):
resp = self.client.get('/')
print resp.data
self.assertequal(resp.data,'sent succeed')
資料庫測試:
#coding=utf-8
import unittest
from author_book import *
#自定義測試類,setup方法和teardown方法會分別在測試前後執行。以test_開頭的函式就是具體的測試**。
class databasetest(unittest.testcase):
def setup(self):
app.config['testing'] = true
app.config['sqlalchemy_database_uri'] = 'mysql://root:mysql@localhost/test0'
self.app = app
db.create_all()
def teardown(self):
db.session.remove()
db.drop_all()
#測試**
def test_程式設計客棧a程式設計客棧ppend_data(self):
au = author(name='itcast')
bk = book(info='python'程式設計客棧)
db.session.add_all([nqhtcfuau,bk])
db.session.commit()
author = author.query.filter_by(name='itcast').first()
book = book.query.filter_by(info='python').first()
#斷言資料存在
self.assertisnotnone(author)
self.assertisnotnone(book)
本文標題: flask框架單元測試原理與用法例項分析
本文位址:
go Test 單元測試 測試框架
1.建立乙個名為 test.go 的檔案 如果是包中的單元測試,就在包所在目錄下建立該檔案 並將下面的 新增到其中,函式命名統一為test t testing.t package main 包中的單元測試main替換成包名 import testing func testsum t testing....
Qt單元測試框架
qtestlib 框架提供了乙個簡單易用的單元測試框架,需要在工程檔案中新增qt testlib。先看乙個簡單的例子 此外,qt還提供了以下四個會被自動呼叫的private slot inittestcase 在測試開始前被呼叫 cleanuptestcase 在測試結束後被呼叫 init 每個測試...
Test Unit Ruby單元測試框架
test unit ruby單元測試框架 介紹 單元測試是xp的核心部分。xp是偉大的,單元測試已出現了很長一段時間,而且它是乙個很好的思想。好的單元測試的關鍵部分不是寫測試 而是要測試。兩者有什麼不同嗎?當然,如果你只是寫測試 而不用它,那麼你以後對 的修改將不會得到保證。換句話說,如果你已經測試...