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

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Python自動(dòng)單元測(cè)試框架的應(yīng)用詳解

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

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

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

測(cè)試最基本的原理就是比較預(yù)期結(jié)果是否與實(shí)際執(zhí)行結(jié)果相同,如果相同則測(cè)試成功,否則測(cè)試失敗。為了更好地理解PyUnit這一自動(dòng)測(cè)試框架的作用,先來(lái)看一個(gè)簡(jiǎn)單的例子,假設(shè)我們要對(duì)例1中的Widget類進(jìn)行測(cè)試:

例1. widget.py

 
 
 
  1. # 將要被測(cè)試的類  
  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 

采用手工方式進(jìn)行Python單元測(cè)試的Python程序員很可能會(huì)寫出類似例2的測(cè)試代碼來(lái),

例2. manual.py

 
 
 
  1. from widget import Widget  
  2. # 執(zhí)行測(cè)試的類  
  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. # 測(cè)試  
  12. if __name__ == '__main__':  
  13. myTest = TestWidget()  
  14. myTest.testSize() 

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

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

例3. auto.py

 
 
 
  1. from widget import Widget  
  2. import unittest  
  3. # 執(zhí)行測(cè)試的類  
  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. # 構(gòu)造測(cè)試集  
  12. def suite():  
  13. suite = unittest.TestSuite()  
  14. suite.addTest(WidgetTestCase("testSize"))  
  15. return suite  
  16. # 測(cè)試  
  17. if __name__ == "__main__":  
  18. unittest.main(defaultTest = 'suite') 

在采用Python單元測(cè)試框架后,用于測(cè)試的代碼做了相應(yīng)的改動(dòng):

◆用import語(yǔ)句引入unittest模塊。

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

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

◆在testSize()中調(diào)用assertEqual()方法,對(duì)Widget類中g(shù)etSize()方法的返回值和預(yù)期值進(jìn)行比較,確保兩者是相等的,assertEqual()也是TestCase類中定義的方法。

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

雖然看起來(lái)有點(diǎn)復(fù)雜,但PyUnit使得所有的Python程序員都可以使用同樣的Python單元測(cè)試方法,測(cè)試過(guò)程不再是雜亂無(wú)章的了,而是在同一規(guī)范指導(dǎo)下進(jìn)行的有序行為,這就是使用PyUnit這一自動(dòng)單元測(cè)試框架所帶來(lái)的最大好處。

【編輯推薦】

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

當(dāng)前文章:Python自動(dòng)單元測(cè)試框架的應(yīng)用詳解
鏈接分享:http://www.5511xx.com/article/ccdjpdc.html