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

Python的單元測試解析
來源:易賢網 閱讀:928 次 日期:2015-05-04 10:51:33
溫馨提示:易賢網小編為您整理了“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)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
极品尤物久久久av免费看| 在线国产亚洲欧美| 亚洲国产精品va| 乱中年女人伦av一区二区| 国产欧美精品一区| 欧美成人免费网| 亚洲欧美一区二区激情| 国产午夜精品福利| 欧美日本高清视频| 久久精品午夜| 欧美激情一区在线观看| 另类激情亚洲| 欧美一区二区成人| 欧美一区二区三区免费在线看| 日韩视频一区二区三区| 狠久久av成人天堂| 精品成人国产在线观看男人呻吟| 欧美天天在线| 欧美视频一区二区三区在线观看| 欧美成人午夜激情| 久久久久久久999| 乱码第一页成人| 久久久久国产精品www | 国产精品网红福利| 欧美精品久久天天躁| 性欧美videos另类喷潮| 欧美一区二区三区精品| 亚洲无线视频| 一本色道久久综合精品竹菊| 一本久久综合亚洲鲁鲁五月天| 亚洲高清在线播放| 国产精品国产a级| 国产美女精品| 国产精品入口夜色视频大尺度 | 欧美高清在线观看| 久久国产88| 欧美1区视频| 美脚丝袜一区二区三区在线观看 | 欧美xxx成人| 久久精品中文字幕免费mv| 欧美亚洲专区| 欧美福利电影网| 欧美—级高清免费播放| 欧美精品999| 国产乱码精品一区二区三| 国产精品综合av一区二区国产馆| 国产精品进线69影院| 国产一区二区三区丝袜| 国内自拍视频一区二区三区| 国产在线精品一区二区中文| 最新成人在线| 亚洲午夜一区| 久久精品国产清高在天天线 | 国产欧美精品久久| 在线欧美视频| 一区二区三区回区在观看免费视频| 亚洲欧美电影在线观看| 久久动漫亚洲| 欧美高清视频在线 | 亚洲第一天堂无码专区| 亚洲国产一区二区三区在线播| 亚洲精品国产系列| 中文在线资源观看网站视频免费不卡| 亚洲字幕一区二区| 久久精品免视看| 欧美激情aⅴ一区二区三区| 欧美视频一区二区三区在线观看| 国产精品爱啪在线线免费观看| 国产毛片精品国产一区二区三区| 黄色国产精品| 亚洲每日更新| 久久精品亚洲乱码伦伦中文| 蜜桃视频一区| 国产精品视频一二三| 在线色欧美三级视频| 一本久久精品一区二区| 欧美一区在线视频| 欧美精品久久久久久久久老牛影院 | 蜜臀av国产精品久久久久| 欧美另类极品videosbest最新版本| 国产精品国产三级国产普通话蜜臀| 国精品一区二区| 一区二区三区四区五区精品视频| 久久久久综合网| 国产精品美女一区二区| 狠狠色噜噜狠狠色综合久| 精品99视频| 亚洲自拍偷拍色片视频| 欧美大香线蕉线伊人久久国产精品| 欧美激情综合五月色丁香| 国产麻豆综合| 亚洲精品乱码久久久久久按摩观| 亚洲影视在线| 久久婷婷综合激情| 国产精品看片你懂得| 亚洲欧洲一区二区在线观看| 久久久精品tv| 国产九九精品视频| 亚洲美女色禁图| 另类图片国产| 国内免费精品永久在线视频| 在线综合+亚洲+欧美中文字幕| 毛片av中文字幕一区二区| 国产欧美日韩在线视频| 一区二区久久久久| 欧美国产日产韩国视频| 精品成人一区二区三区| 午夜精品影院| 欧美亚洲第一页| 亚洲国产欧美不卡在线观看| 亚洲一区日韩| 亚洲欧美区自拍先锋| 欧美日韩一区视频| 亚洲美女视频网| 欧美成人一区二区| 亚洲电影免费观看高清完整版| 久久不射电影网| 国产日韩一区二区三区在线播放| 亚洲一级特黄| 国产精品久久久久久模特| 99视频精品在线| 欧美三级午夜理伦三级中视频| 亚洲精品偷拍| 欧美日韩天天操| 亚洲午夜精品网| 国产精品www.| 亚洲美洲欧洲综合国产一区| 美女999久久久精品视频| 国产精品久久久久9999| 亚洲影视在线| 国产日韩精品一区二区浪潮av| 亚洲一区中文| 国产欧美日韩视频一区二区三区 | 136国产福利精品导航网址| 久久久久久午夜| 伊伊综合在线| 免费中文字幕日韩欧美| 91久久精品美女| 美女日韩欧美| 国产一区二区三区日韩| 国产在线视频欧美| 欧美在线三区| 国产欧美精品在线| 国产精品精品视频| 亚洲欧美一区二区三区久久| 国产精品一区二区三区四区| 欧美在线3区| 亚洲第一二三四五区| 欧美精品激情在线| 亚洲性感激情| 国产一区二区日韩精品欧美精品| 久久精品青青大伊人av| 一本色道精品久久一区二区三区 | 91久久久久久国产精品| 欧美精品久久99| 午夜精品久久久久久久| 国内精品久久久久影院薰衣草| 久久综合色天天久久综合图片| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美日韩日韩| 久久成人人人人精品欧| 亚洲第一在线| 欧美激情va永久在线播放| 中文一区二区| 尤妮丝一区二区裸体视频| 欧美日韩a区| 久久久久欧美精品| 午夜在线a亚洲v天堂网2018| 亚洲一区二区三区在线播放| 一区二区三区www| av成人手机在线| 亚洲免费大片| 亚洲日本欧美日韩高观看| 18成人免费观看视频| 樱桃成人精品视频在线播放| 禁断一区二区三区在线| 伊人久久亚洲美女图片| 在线观看国产欧美| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产亚洲一区在线播放| 国产一区二区三区黄| 国产一区二区三区自拍| 国产又爽又黄的激情精品视频| 国产亚洲欧美日韩一区二区| 国产日韩一区二区三区| 国产日韩一区二区三区| 黄色一区二区三区| 亚洲国产福利在线| 亚洲电影在线免费观看| 精品盗摄一区二区三区| 在线精品观看| 在线观看亚洲视频啊啊啊啊| 亚洲国产视频一区二区| 亚洲精品在线观看免费| 亚洲网站视频| 翔田千里一区二区| 久久av一区二区| 另类尿喷潮videofree| 欧美成人性网| 国产精品啊v在线|