日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
Python自動單元測試框架的應用詳解

測試是一個貫穿于整個開發(fā)過程的連續(xù)過程,從某個意義上說,軟件開發(fā)的過程實際上就是測試過程。正如Martin Fowler所說的,“在你不知道如何測試代碼之前,就不該編寫程序。而一旦你完成了程序,測試代碼也應該完成。除非測試成功,你不能認為你編寫出了可以工作的程序?!?/p>

創(chuàng)新互聯公司是一家專注網站建設、網絡營銷策劃、微信小程序定制開發(fā)、電子商務建設、網絡推廣、移動互聯開發(fā)、研究、服務為一體的技術型公司。公司成立10余年以來,已經為上1000家成都格柵板各業(yè)的企業(yè)公司提供互聯網服務?,F在,服務的上1000家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。

推薦閱讀:旁觀者清 Python與Ruby各有千秋

測試最基本的原理就是比較預期結果是否與實際執(zhí)行結果相同,如果相同則測試成功,否則測試失敗。為了更好地理解PyUnit這一自動測試框架的作用,先來看一個簡單的例子,假設我們要對例1中的Widget類進行測試:

例1. widget.py

 
 
 
  1. # 將要被測試的類  
  2. class Widget:  
  3. def __init__(self, size = (40, 40)):  
  4. self._size = size  
  5. def getSize(self):  
  6. return self._size  
  7. def resize(self, width, height):  
  8. if width 0 or height < 0: 
  9. raise ValueError, "illegal size"  
  10. self._size = (width, height)  
  11. def dispose(self):  
  12. pass 

采用手工方式進行Python單元測試的Python程序員很可能會寫出類似例2的測試代碼來,

例2. manual.py

 
 
 
  1. from widget import Widget  
  2. # 執(zhí)行測試的類  
  3. class TestWidget:  
  4. def testSize(self):  
  5. expectedSize = (40, 40);  
  6. widget = Widget()  
  7. if widget.getSize() == expectedSize:  
  8. print "test [Widget]: getSize works perfected!"  
  9. else:  
  10. print "test [Widget]: getSize doesn't work!"  
  11. # 測試  
  12. if __name__ == '__main__':  
  13. myTest = TestWidget()  
  14. myTest.testSize() 

稍一留心你不難發(fā)現這種手工測試方法存在許多問題。首先,測試程序的寫法沒有一定的規(guī)范可以遵循,十個程序員完全可能寫出十種不同的測試程序來,如果每個 Python程序員都有自己不同的設計測試類的方法,光維護被測試的類就夠麻煩了,誰還顧得上維護測試類。其次,需要編寫大量的輔助代碼才能進行單元測試,例1中用于測試的代碼甚至比被測試的代碼還要多,而這毫無疑問將增大Python程序員的工作量。

為了讓單元測試代碼能夠被測試和維護人員更容易地理解,最好的解決辦法是讓開發(fā)人員遵循一定的規(guī)范來編寫用于測試的代碼,具體到Python程序員來講,則是要采用 PyUnit這一自動測試框架來構造單元測試用例。目前PyUnit已經得到了大多數Python開發(fā)人員的認可,成了事實上的Python單元測試標準。如果采用 PyUnit來進行同樣的測試,則測試代碼將如例3所示:

例3. auto.py

 
 
 
  1. from widget import Widget  
  2. import unittest  
  3. # 執(zhí)行測試的類  
  4. class WidgetTestCase(unittest.TestCase):  
  5. def setUp(self):  
  6. self.widget = Widget()  
  7. def tearDown(self):  
  8. self.widget = None 
  9. def testSize(self):  
  10. self.assertEqual(self.widget.getSize(), (40, 40))  
  11. # 構造測試集  
  12. def suite():  
  13. suite = unittest.TestSuite()  
  14. suite.addTest(WidgetTestCase("testSize"))  
  15. return suite  
  16. # 測試  
  17. if __name__ == "__main__":  
  18. unittest.main(defaultTest = 'suite') 

在采用Python單元測試框架后,用于測試的代碼做了相應的改動:

◆用import語句引入unittest模塊。

◆讓所有執(zhí)行測試的類都繼承于TestCase類,可以將TestCase看成是對特定類進行測試的方法的集合。

◆在setUp()方法中進行測試前的初始化工作,并在tearDown()方法中執(zhí)行測試后的清除工作,setUp()和tearDown()都是TestCase類中定義的方法。

◆在testSize()中調用assertEqual()方法,對Widget類中getSize()方法的返回值和預期值進行比較,確保兩者是相等的,assertEqual()也是TestCase類中定義的方法。

◆提供名為suite()的全局方法,PyUnit在執(zhí)行測試的過程調用suit()方法來確定有多少個測試用例需要被執(zhí)行,可以將TestSuite看成是包含所有測試用例的一個容器。

雖然看起來有點復雜,但PyUnit使得所有的Python程序員都可以使用同樣的Python單元測試方法,測試過程不再是雜亂無章的了,而是在同一規(guī)范指導下進行的有序行為,這就是使用PyUnit這一自動單元測試框架所帶來的最大好處。

【編輯推薦】

  1. Python閉包的概念、形式與應用
  2. 全能選手 看看Python應乎潮流的72變
  3. 旁觀者清 Python與Ruby各有千秋
  4. 加速程序開發(fā) Python整合C語言模塊
  5. 對Python特色的詳細介紹

標題名稱:Python自動單元測試框架的應用詳解
文章網址:http://m.5511xx.com/article/ccdjpdc.html