国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Python的單元測試

2020-02-23 00:56:24
字體:
來源:轉載
供稿:網友

如果你聽說過“測試驅動開發”(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']1>>> d.a1

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 unittestfrom mydict import Dictclass 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開頭的方法不被認為是測試方法,測試的時候不會被執行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉源县| 咸丰县| 大同县| 莱阳市| 吴桥县| 鄢陵县| 柳州市| 东阳市| 海兴县| 福鼎市| 孟州市| 峨眉山市| 盐边县| 上蔡县| 咸宁市| 安阳县| 平潭县| 泊头市| 贡嘎县| 沙坪坝区| 扶绥县| 石台县| 沙湾县| 商都县| 沙河市| 南汇区| 老河口市| 景宁| 稷山县| 长沙市| 兰西县| 枞阳县| 凤台县| 新巴尔虎右旗| 民勤县| 漯河市| 怀化市| 克拉玛依市| 宾阳县| 扬中市| 宁武县|