新聞中心
Python中有一種測(cè)試方法叫做單元測(cè)試。它的使用可以給我們開(kāi)發(fā)人員在實(shí)際程序開(kāi)發(fā)中帶來(lái)非常大的好處。在這里我們就可以通過(guò)本文介紹的關(guān)于Python單元測(cè)試的相關(guān)內(nèi)容來(lái)對(duì)這一方面的知識(shí)有一個(gè)相應(yīng)的了解。#t#

平陸ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!
測(cè)試是一個(gè)貫穿于整個(gè)開(kāi)發(fā)過(guò)程的連續(xù)過(guò)程,從某個(gè)意義上說(shuō),軟件開(kāi)發(fā)的過(guò)程實(shí)際上就是測(cè)試過(guò)程。正如Martin Fowler所說(shuō)的"在你不知道如何測(cè)試代碼之前,就不該編寫(xiě)程序。而一旦你完成了程序,測(cè)試代碼也應(yīng)該完成。除非測(cè)試成功,你不能認(rèn)為你編寫(xiě)出了可以工作的程序。"
測(cè)試最基本的原理就是比較預(yù)期結(jié)果是否與實(shí)際執(zhí)行結(jié)果相同,如果相同則測(cè)試成功,否則測(cè)試失敗。為了更好地理解PyUnit這一自動(dòng)測(cè)試框架的作用,先來(lái)看一個(gè)簡(jiǎn)單的例子,假設(shè)我們要對(duì)例1中的Widget類(lèi)進(jìn)行測(cè)試:
例1. widget.py
- # 將要被測(cè)試的類(lèi)
- class Widget:
- def __init__(self, size = (40, 40)):
- self._size = size
- def getSize(self):
- return self._size
- def resize(self, width, height):
- if width 0 or height < 0:
- raise ValueError, "illegal size"
- self._size = (width, height)
- def dispose(self):
- pass
采用手工方式進(jìn)行Python單元測(cè)試的Python程序員很可能會(huì)寫(xiě)出類(lèi)似例2的測(cè)試代碼來(lái),
例2. manual.py
- from widget import Widget
- # 執(zhí)行測(cè)試的類(lèi)
- class TestWidget:
- def testSize(self):
- expectedSize = (40, 40);
- widget = Widget()
- if widget.getSize() == expectedSize:
- print "test [Widget]: getSize works perfected!"
- else:
- print "test [Widget]: getSize doesn't work!"
- # 測(cè)試
- if __name__ == '__main__':
- myTest = TestWidget()
- myTest.testSize()
稍一留心你不難發(fā)現(xiàn)這種手工測(cè)試方法存在許多問(wèn)題。首先,測(cè)試程序的寫(xiě)法沒(méi)有一定的規(guī)范可以遵循,十個(gè)程序員完全可能寫(xiě)出十種不同的測(cè)試程序來(lái),如果每個(gè) Python程序員都有自己不同的設(shè)計(jì)測(cè)試類(lèi)的方法,光維護(hù)被測(cè)試的類(lèi)就夠麻煩了,誰(shuí)還顧得上維護(hù)測(cè)試類(lèi)。其次,需要編寫(xiě)大量的輔助代碼才能進(jìn)行單元測(cè)試,例1中用于測(cè)試的代碼甚至比被測(cè)試的代碼還要多,而這毫無(wú)疑問(wèn)將增大Python程序員的工作量。
為了讓單元測(cè)試代碼能夠被測(cè)試和維護(hù)人員更容易地理解,最好的解決辦法是讓開(kāi)發(fā)人員遵循一定的規(guī)范來(lái)編寫(xiě)用于測(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
- from widget import Widget
- import unittest
- # 執(zhí)行測(cè)試的類(lèi)
- class WidgetTestCase(unittest.TestCase):
- def setUp(self):
- self.widget = Widget()
- def tearDown(self):
- self.widget = None
- def testSize(self):
- self.assertEqual(self.widget.getSize(), (40, 40))
- # 構(gòu)造測(cè)試集
- def suite():
- suite = unittest.TestSuite()
- suite.addTest(WidgetTestCase("testSize"))
- return suite
- # 測(cè)試
- if __name__ == "__main__":
- unittest.main(defaultTest = 'suite')
在采用Python單元測(cè)試框架后,用于測(cè)試的代碼做了相應(yīng)的改動(dòng):
用import語(yǔ)句引入unittest模塊。
讓所有執(zhí)行測(cè)試的類(lèi)都繼承于TestCase類(lèi),可以將TestCase看成是對(duì)特定類(lèi)進(jìn)行測(cè)試的方法的集合。
在setUp()方法中進(jìn)行測(cè)試前的初始化工作,并在tearDown()方法中執(zhí)行測(cè)試后的清除工作,setUp()和tearDown()都是TestCase類(lèi)中定義的方法。
在testSize()中調(diào)用assertEqual()方法,對(duì)Widget類(lèi)中g(shù)etSize()方法的返回值和預(yù)期值進(jìn)行比較,確保兩者是相等的,assertEqual()也是TestCase類(lèi)中定義的方法。
提供名為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)的最大好處。
網(wǎng)頁(yè)題目:Python單元測(cè)試正確使用規(guī)則
當(dāng)前地址:http://m.fisionsoft.com.cn/article/cdhshci.html


咨詢(xún)
建站咨詢(xún)
