工作後忽然發現,對於乙個開發者,自己的**一定要做好充分的單元測試才能提交**。
單元測試可以有效地測試某個程式模組的行為,是未來重構**的信心保證。
單元測試的測試用例要覆蓋常用的輸入組合、邊界條件和異常。
單元測試**要非常簡單,如果測試**太複雜,那麼測試**本身就可能有bug。
單元測試通過了並不意味著程式就沒有bug了,但是不通過程式肯定有bug。
其他的不多說,直接看乙個測試:
我們來編寫乙個dict類,這個類的行為和dict一致,但是可以通過屬性來訪問,用起來就像下面這樣:
>>> d = dict(a=1, b=2)
>>> d['a']
1>>> d.a
1
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
if __name__ == "__main__":
import unittest
class
testdict
(unittest.testcase):
""" unit test case for class dict
"""defsetup
(self):
print
'setup...'
defteardown
(self):
print
'teardown...'
deftest_init
(self):
d = dict(a=1, b='test')
self.assertequals(d.a, 1)
self.assertequals(d.b, 'test')
self.asserttrue(isinstance(d, dict))
deftest_key
(self):
d = dict()
d['key'] = 'value'
self.assertequals(d.key, 'value')
deftest_attr
(self):
d = dict()
d.key = 'value'
self.asserttrue('key'
in d)
self.assertequals(d['key'], 'value')
deftest_keyerror
(self):
d = dict()
with self.assertraises(keyerror):
value = d['empty']
deftest_attrerror
(self):
d = dict()
with self.assertraises(attributeerror):
value = d.empty
unittest.main()
有的一些地方,把測試用例**和被測試的**分開寫,個人覺得不好管理。
通過在類最後呼叫unittest.main()
就可以執行測試用例**。
可以在單元測試中編寫兩個特殊的setup()和teardown()方法。這兩個方法會分別在每呼叫乙個測試方法的前後分別被執行。
setup()和teardown()方法有什麼用呢?設想你的測試需要啟動乙個資料庫,這時,就可以在setup()方法中連線資料庫,在teardown()方法中關閉資料庫,這樣,不必在每個測試方法中重複相同的**。
Python 單元測試
一 假設我們編寫了一段程式,主要功能是完成阿拉伯數字和羅馬數字之間的轉換 在羅馬數字中,利用7個字母進行重複或者組合來表達各式各樣的數字 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 還有一些關於構造羅馬數字的規則。此程式的框架如下 其中,class romanerror...
python 單元測試
assertequal a,b assertnotequal a,b 斷言值是否相等 assertis a,b assertisnot a,b 斷言是否同一物件 記憶體位址一樣 assertlistequal list1,list2 assertitemnotequal list1,list2 斷言...
Python單元測試
本文章整理自 使用python3.6編寫乙個單元測試demo,例如 對學生student類編寫乙個簡單的單元測試。1 編寫student類 usr bin env python3 coding utf 8 class student object def init self,name,score s...