中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Python的單元測試解析
來源:易賢網 閱讀:899 次 日期:2015-04-30 14:07:12
溫馨提示:易賢網小編為您整理了“Python的單元測試解析”,方便廣大網友查閱!

這篇文章主要介紹了Python的單元測試,代碼基于Python2.x版本,需要的朋友可以參考下

如果你聽說過“測試驅動開發”(TDD:Test-Driven Development),單元測試就不陌生。

單元測試是用來對一個模塊、一個函數或者一個類來進行正確性檢驗的測試工作。

比如對函數abs(),我們可以編寫出以下幾個測試用例:

輸入正數,比如1、1.2、0.99,期待返回值與輸入相同;

輸入負數,比如-1、-1.2、-0.99,期待返回值與輸入相反;

輸入0,期待返回0;

輸入非數值類型,比如None、[]、{},期待拋出TypeError。

把上面的測試用例放到一個測試模塊里,就是一個完整的單元測試。

如果單元測試通過,說明我們測試的這個函數能夠正常工作。如果單元測試不通過,要么函數有bug,要么測試條件輸入不正確,總之,需要修復使單元測試能夠通過。

單元測試通過后有什么意義呢?如果我們對abs()函數代碼做了修改,只需要再跑一遍單元測試,如果通過,說明我們的修改不會對abs()函數原有的行為造成影響,如果測試不通過,說明我們的修改與原有行為不一致,要么修改代碼,要么修改測試。

這種以測試為驅動的開發模式最大的好處就是確保一個程序模塊的行為符合我們設計的測試用例。在將來修改的時候,可以極大程度地保證該模塊行為仍然是正確的。

我們來編寫一個Dict類,這個類的行為和dict一致,但是可以通過屬性來訪問,用起來就像下面這樣:

>>> d = Dict(a=1, b=2)

>>> d['a']

>>> d.a

mydict.py代碼如下:

class Dict(dict):

def __init__(self, **kw):

super(Dict, self).__init__(**kw)

def __getattr__(self, key):

try:

return self[key]

except KeyError:

raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

def __setattr__(self, key, value):

self[key] = value

為了編寫單元測試,我們需要引入Python自帶的unittest模塊,編寫mydict_test.py如下

import unittest

from mydict import Dict

class TestDict(unittest.TestCase):

def test_init(self):

d = Dict(a=1, b='test')

self.assertEquals(d.a, 1)

self.assertEquals(d.b, 'test')

self.assertTrue(isinstance(d, dict))

def test_key(self):

d = Dict()

d['key'] = 'value'

self.assertEquals(d.key, 'value')

def test_attr(self):

d = Dict()

d.key = 'value'

self.assertTrue('key' in d)

self.assertEquals(d['key'], 'value')

def test_keyerror(self):

d = Dict()

with self.assertRaises(KeyError):

value = d['empty']

def test_attrerror(self):

d = Dict()

with self.assertRaises(AttributeError):

value = d.empty

編寫單元測試時,我們需要編寫一個測試類,從unittest.TestCase繼承。

以test開頭的方法就是測試方法,不以test開頭的方法不被認為是測試方法,測試的時候不會被執行。

對每一類測試都需要編寫一個test_xxx()方法。由于unittest.TestCase提供了很多內置的條件判斷,我們只需要調用這些方法就可以斷言輸出是否是我們所期望的。最常用的斷言就是assertEquals():

self.assertEquals(abs(-1), 1) # 斷言函數返回的結果與1相等

另一種重要的斷言就是期待拋出指定類型的Error,比如通過d['empty']訪問不存在的key時,斷言會拋出KeyError:

with self.assertRaises(KeyError):

value = d['empty']

而通過d.empty訪問不存在的key時,我們期待拋出AttributeError:

with self.assertRaises(AttributeError):

value = d.empty

運行單元測試

一旦編寫好單元測試,我們就可以運行單元測試。最簡單的運行方式是在mydict_test.py的最后加上兩行代碼:

if __name__ == '__main__':

unittest.main()

這樣就可以把mydict_test.py當做正常的python腳本運行:

$ python mydict_test.py

另一種更常見的方法是在命令行通過參數-m unittest直接運行單元測試:

$ python -m unittest mydict_test

.....

----------------------------------------------------------------------

Ran 5 tests in 0.000s

OK

這是推薦的做法,因為這樣可以一次批量運行很多單元測試,并且,有很多工具可以自動來運行這些單元測試。

setUp與tearDown

可以在單元測試中編寫兩個特殊的setUp()和tearDown()方法。這兩個方法會分別在每調用一個測試方法的前后分別被執行。

setUp()和tearDown()方法有什么用呢?設想你的測試需要啟動一個數據庫,這時,就可以在setUp()方法中連接數據庫,在tearDown()方法中關閉數據庫,這樣,不必在每個測試方法中重復相同的代碼:

class TestDict(unittest.TestCase):

def setUp(self):

print 'setUp...'

def tearDown(self):

print 'tearDown...'

可以再次運行測試看看每個測試方法調用前后是否會打印出setUp...和tearDown...。

小結

單元測試可以有效地測試某個程序模塊的行為,是未來重構代碼的信心保證。

單元測試的測試用例要覆蓋常用的輸入組合、邊界條件和異常。

單元測試代碼要非常簡單,如果測試代碼太復雜,那么測試代碼本身就可能有bug。

單元測試通過了并不意味著程序就沒有bug了,但是不通過程序肯定有bug。

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:Python的單元測試解析
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
99精品国产一区二区青青牛奶| 亚洲影视综合| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲在线视频网站| 欧美中文字幕在线观看| 久久久久久黄| 欧美午夜不卡在线观看免费| 国产精品每日更新| 亚洲盗摄视频| 亚洲视频狠狠| 久久一区亚洲| 欧美午夜精品久久久久久超碰| 国产精品成人一区二区艾草| 国产在线精品一区二区中文| 亚洲精品视频免费在线观看| 午夜免费在线观看精品视频| 欧美成人a∨高清免费观看| 国产精品久久久一区麻豆最新章节| 樱桃成人精品视频在线播放| 一区二区三区精密机械公司| 久久夜色精品国产| 国产女主播视频一区二区| 日韩一级片网址| 欧美成人亚洲| 在线观看亚洲一区| 欧美在线观看天堂一区二区三区| 欧美日韩国产精品| 99国内精品久久| 欧美三区视频| 亚洲一区999| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲黑丝在线| 欧美精品观看| 亚洲深夜福利视频| 欧美丝袜一区二区三区| 亚洲桃花岛网站| 国产精品视频精品| 欧美一级网站| 在线免费观看成人网| 欧美国产大片| 亚洲欧美日韩成人| 国产一区香蕉久久| 欧美va天堂在线| 亚洲人久久久| 国产欧美日韩另类视频免费观看| 欧美一级在线播放| 亚洲盗摄视频| 国产精品免费观看在线| 久久另类ts人妖一区二区| 亚洲人成欧美中文字幕| 国产精品一区二区在线| 老色批av在线精品| 亚洲免费av观看| 国产亚洲毛片在线| 亚洲综合色在线| 亚洲第一黄色网| 国产精品视频久久久| 欧美极品aⅴ影院| 亚洲欧美网站| 一本色道久久综合精品竹菊| 欧美人与性禽动交情品| 欧美中文字幕在线视频| 亚洲午夜在线观看| 99这里只有久久精品视频| 亚洲大胆av| 在线观看一区二区视频| 国产一区二区黄色| 国产精品一区二区在线观看网站 | 国模精品娜娜一二三区| 欧美三区美女| 国产精品欧美激情| 国产精品视频专区| 国产日韩av一区二区| 国产精品试看| 国产一区91精品张津瑜| 国产日韩欧美在线播放| 国产精品素人视频| 国产日韩综合一区二区性色av| 国产免费一区二区三区香蕉精| 国产精品一区二区久久久久| 国产精品有限公司| 禁久久精品乱码| 亚洲美女中文字幕| 欧美一级在线播放| 久久免费视频在线观看| 免费不卡在线视频| 国产精品久久久久久久9999| 国内精品美女av在线播放| 亚洲另类在线一区| 久久久久久国产精品mv| 欧美午夜一区| 亚洲国产一区二区视频| 日韩亚洲欧美中文三级| 一区二区久久久久久| 欧美一区二区三区精品电影| 欧美91精品| 久久激情婷婷| 欧美国产日韩精品| 欧美成人资源| 欧美日韩另类一区| 国产伦精品一区二区三区四区免费 | 国产日韩精品一区二区三区在线| 国产精品久久久久久亚洲毛片| 久久精品国产96久久久香蕉| 亚洲欧美日本另类| 性欧美8khd高清极品| 女人天堂亚洲aⅴ在线观看| 欧美日韩美女| 激情91久久| 一区二区精品| 老司机67194精品线观看| 国产精品久久久久久久久久ktv | 国模私拍视频一区| 亚洲人成亚洲人成在线观看| 亚洲小说春色综合另类电影| 久久国产精品一区二区三区| 欧美视频二区| 国产一区二区日韩| 亚洲精品日产精品乱码不卡| 久久久久网站| 国模叶桐国产精品一区| 亚洲欧美一区二区三区久久| 老司机免费视频久久| 国产性色一区二区| 亚洲一区国产精品| 欧美日韩精品一区| 99国产麻豆精品| 99re热这里只有精品免费视频| 免费久久精品视频| 国产主播一区二区三区四区| 国产一区二区三区不卡在线观看| 亚洲午夜精品国产| 国产情侣一区| 久久久久亚洲综合| 曰韩精品一区二区| 久久先锋资源| 亚洲另类春色国产| 欧美午夜一区二区| 一区二区三区视频在线看| 国产精品高清网站| 午夜精彩视频在线观看不卡| 国产真实乱偷精品视频免| 久久免费视频这里只有精品| 亚洲乱码国产乱码精品精可以看| 欧美日本国产一区| 午夜精品影院在线观看| 一区二区三区在线高清| 欧美视频精品一区| 国产亚洲欧美日韩在线一区| 欧美二区视频| 久久精品国产一区二区三 | 欧美高清不卡| 西瓜成人精品人成网站| 黄色免费成人| 久久久久成人网| 亚洲男人av电影| 亚洲精品韩国| 亚洲精品1234| 国产自产精品| 国产日韩一级二级三级| 欧美日韩久久不卡| 欧美韩国日本综合| 性欧美xxxx视频在线观看| 91久久精品视频| 在线观看日韩av电影| 久久久999精品免费| 欧美综合国产精品久久丁香| 亚洲免费在线观看| 亚洲欧美激情在线视频| 在线视频中文亚洲| 一区二区三区四区蜜桃| 中文日韩在线视频| 一本一本a久久| 亚洲视频成人| 欧美在线欧美在线| 久久久www成人免费精品| 欧美在线免费视频| 卡通动漫国产精品| 欧美成人精品影院| 欧美日韩美女在线观看| 国产精品普通话对白| 国产精品国产三级国产| 国产一区二区三区四区三区四| 影音先锋日韩资源| 亚洲另类自拍| 香蕉亚洲视频| 麻豆精品视频在线| 欧美午夜精品久久久久久孕妇| 国产精品私房写真福利视频| 国产精品视频| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲国产成人不卡| 亚洲一区二区免费看| 久久综合色天天久久综合图片| 欧美精品一区二区三区久久久竹菊 | 亚洲一区二区三区精品视频| 性做久久久久久免费观看欧美| 欧美丰满高潮xxxx喷水动漫| 国产精品婷婷| 日韩天堂在线视频|