欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python單元測(cè)試中unittest是怎樣的-創(chuàng)新互聯(lián)

python單元測(cè)試中unittest是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司10多年經(jīng)驗(yàn)成就非凡,專業(yè)從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)頁(yè)制作,軟文發(fā)布平臺(tái)一元廣告等。10多年來已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:18982081108,我們期待您的來電!

單元測(cè)試作為任何語言的開發(fā)者都應(yīng)該是必要的,因?yàn)闀r(shí)隔數(shù)月后再回來調(diào)試自己的復(fù)雜程序時(shí),其實(shí)也是很崩潰的事情。雖然會(huì)很快熟悉內(nèi)容,但是修改和調(diào)試將是一件痛苦的事情,如果你在修改了代碼后出現(xiàn)問題的話,而單元測(cè)試可以幫助我們很快準(zhǔn)確的定位到問題的位置,出現(xiàn)問題的模塊和單元。所以這是一件很愉快的事情,因?yàn)槲覀冎榔渌薷幕驔]有修改的地方仍然是正常工作的,而我們目前的問題就是搞定眼前這個(gè)有點(diǎn)問題的“家伙”。所以工作會(huì)在輕松中開始,并且很快將會(huì)結(jié)束,因?yàn)槟阋呀?jīng)知道很多信息了。

單元測(cè)試自然是對(duì)程序中最小的可測(cè)試模塊--函數(shù)來進(jìn)行測(cè)試;因?yàn)閱卧獪y(cè)試的對(duì)象是函數(shù),也就是說你得被測(cè)試對(duì)象一定要有輸出結(jié)果,哪怕就是異常輸出,也得有輸出,以便單元測(cè)試模塊能夠捕獲返回值,并且與預(yù)期值進(jìn)行比較,從而得出測(cè)試通過與否。

單元測(cè)試的加載方式有2種:一種是通過unittest.main()來啟動(dòng)單元測(cè)試的測(cè)試模塊;一種是添加到testsuite集合中再加載所有的被測(cè)試對(duì)象,而testsuit里存放的就是單元測(cè)試的用例,下面分別列出了2種方法的使用。

1.1 測(cè)試模塊中的函數(shù):

被測(cè)模塊:

[python] view
plaincopy

  1. #!/usr/bin/env python

  2. #encoding: utf-8


  3. def sum( x, y):

  4.         return x+y



  5. def sub( x, y):

  6.         return x-y

單元測(cè)試模塊:

[python] view
plaincopy

  1. #!/usr/bin/env python

  2. #encoding: utf-8


  3. import unittest

  4. import myclass


  5. class mytest(unittest.TestCase):


  6.     ##初始化工作

  7.     def setUp(self):

  8.         pass


  9.     #退出清理工作

  10.     def tearDown(self):

  11.         pass


  12.     #具體的測(cè)試用例,一定要以test開頭

  13.     def testsum(self):

  14.         self.assertEqual(myclass.sum(1, 2), 2, 'test sum fail')



  15.     def testsub(self):

  16.         self.assertEqual(myclass.sub(2, 1), 1, 'test sub fail')



  17. if __name__ =='__main__':

  18.     unittest.main()

測(cè)試結(jié)果:【F表示一個(gè)fail, F前的點(diǎn)表示一個(gè)通過,有E的話表示程序自身異常】

[python] view
plaincopy

  1. .F

  2. ======================================================================

  3. FAIL: testsum (__main__.mytest)

  4. ----------------------------------------------------------------------

  5. Traceback (most recent call last):

  6.   File "C:\Users\xiaowu\workspace\mypython\unitTest.py", line 19, in testsum

  7.     self.assertEqual(myclass.sum(1, 2), 2, 'test sum fail')

  8. AssertionError: test sum fail


  9. ----------------------------------------------------------------------

  10. Ran 2 tests in 0.001s


  11. FAILED (failures=1)

1.2 測(cè)試模塊類中的函數(shù):

被測(cè)模塊:

[python] view
plaincopy

  1. #!/usr/bin/env python

  2. #encoding: utf-8


  3. class myclass:

  4.     def __init__(self):

  5.         pass



  6.     def sum(self, x, y):

  7.         return x+y



  8.     def sub(self, x, y):

  9.         return x-y

單元測(cè)試模塊:

[python] view
plaincopy

  1. #!/usr/bin/env python

  2. #encoding: utf-8


  3. import unittest

  4. import myclass


  5. class mytest(unittest.TestCase):


  6.     ##初始化工作

  7.     def setUp(self):

  8.         self.tclass = myclass.myclass()   ##實(shí)例化了被測(cè)試模塊中的類


  9.     #退出清理工作

  10.     def tearDown(self):

  11.         pass


  12.     #具體的測(cè)試用例,一定要以test開頭

  13.     def testsum(self):

  14.         self.assertEqual(self.tclass.sum(1, 2), 3)



  15. if __name__ =='__main__':

  16.     unittest.main()

運(yùn)行結(jié)果:

[python] view
plaincopy

  1. .

  2. ----------------------------------------------------------------------

  3. Ran 1 test in 0.000s


  4. OK

這種方式執(zhí)行單個(gè)測(cè)試文件時(shí)使用-v參數(shù)可以獲得更多的測(cè)試結(jié)果信息。如:mytest.py -v

2 加載測(cè)試套件

好吧,在運(yùn)用測(cè)試套件進(jìn)行單元測(cè)試之前,我想還是稍微研究一下unittest模塊的內(nèi)容有哪些,其大概的運(yùn)行方式是什么樣的。而后在給出根據(jù)各種情況如何制定單元測(cè)試套件。

首先,自然是查看unittest模塊有哪些成員啦!

[python] view
plaincopy

  1. >>import unittest

  2. >>dir(unittest)

  3. ['FunctionTestCase', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult', 'Tes

  4. tSuite', 'TextTestRunner', '_CmpToKey', '_TextTestResult', '_WritelnDecorator',

  5. '__all__', '__author__', '__builtins__', '__doc__', '__email__', '__file__', '__

  6. metaclass__', '__name__', '__package__', '__unittest', '__version__', '_makeLoad

  7. er', '_strclass', 'defaultTestLoader', 'findTestCases', 'getTestCaseNames', 'mai

  8. n', 'makeSuite', 'os', 'sys', 'time', 'traceback', 'types']

可以看到其自身的成員也不是很多,大概包括有:
['FunctionTestCase', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult',
 'TestSuite','TextTestRunner', '_CmpToKey', '_TextTestResult', '_WritelnDecorator',
 'defaultTestLoader','findTestCases', 'getTestCaseNames', 'main', 'makeSuite']
 
 好吧,我們大概看看具體都是干什么的

[python] view
plaincopy

  1. >>memblist = ['FunctionTestCase', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult',\

  2. 'TestSuite','TextTestRunner', 'defaultTestLoader','findTestCases', 'getTestCaseNames', \

  3. 'main', 'makeSuite']

  4. >>for memb in memblist:

  5. ..  cur = getattr(unittest, memb)

  6. ..  print help(cur)

 'FunctionTestCase':函數(shù)測(cè)試用例,即給一個(gè)函數(shù)作為參數(shù),返回一個(gè)testcase實(shí)例,可選參數(shù)有set-up,tear-down方法
 'TestCase':所有測(cè)試用例的基本類,給一個(gè)測(cè)試方法的名字,返回一個(gè)測(cè)試用例實(shí)例
 'TestLoader':測(cè)試用例加載器,其包括多個(gè)加載測(cè)試用例的方法。返回一個(gè)測(cè)試套件
 loadTestsFromModule(self, module)--根據(jù)給定的模塊實(shí)例來獲取測(cè)試用例套件
 loadTestsFromName(self, name, module=None)
 --根據(jù)給定的字符串來獲取測(cè)試用例套件,字符串可以是模塊名,測(cè)試類名,測(cè)試類中的測(cè)試方法名,或者一個(gè)可調(diào)用的是實(shí)例對(duì)象
 這個(gè)實(shí)例對(duì)象返回一個(gè)測(cè)試用例或一個(gè)測(cè)試套件
 loadTestsFromNames(self, names, module=None) --和上面功能相同,只不過接受的是字符串列表
 loadTestsFromTestCase(self, testCaseClass)--根據(jù)給定的測(cè)試類,獲取其中的所有測(cè)試方法,并返回一個(gè)測(cè)試套件
'TestProgram':命令行進(jìn)行單元測(cè)試的調(diào)用方法,作用是執(zhí)行一個(gè)測(cè)試用例。其實(shí)unittest.main()方法執(zhí)行的就是這個(gè)命令,
而這個(gè)類實(shí)例時(shí)默認(rèn)加載當(dāng)前執(zhí)行的作為測(cè)試對(duì)象,
原型為 __init__(self, module='__main__', defaultTest=None, argv=None, testRunner=xx, testLoader=xx)
其中module='__main__'就是默認(rèn)加載自身
'TestResult':測(cè)試用例的結(jié)果保存實(shí)例,通常有測(cè)試框架調(diào)用
 'TestSuite':組織測(cè)試用例的實(shí)例,支持測(cè)試用例的添加和刪除,最終將傳遞給testRunner進(jìn)行測(cè)試執(zhí)行
 'TextTestRunner':進(jìn)行測(cè)試用例執(zhí)行的實(shí)例,其中Text的意思是以文本形式顯示測(cè)試結(jié)果。顯示測(cè)試名稱,即完成的測(cè)試結(jié)果,其過同執(zhí)行單元測(cè)試腳本時(shí)添加-v參數(shù)
 'defaultTestLoader':其實(shí)就是TestLoader
 'findTestCases', 'getTestCaseNames':這個(gè)2個(gè)就不用解釋了
 'main': 其實(shí)就是TestProgram
 'makeSuite':通常是由單元測(cè)試框架調(diào)用的,用于生產(chǎn)testsuite對(duì)象的實(shí)例
 
 至此,我們知道了。其實(shí)整個(gè)單元測(cè)試框架的邏輯出來了。分三步走:第一步testloader根據(jù)傳入的參數(shù)獲得相應(yīng)的測(cè)試用例,即對(duì)應(yīng)具體的測(cè)試方法,
 然后makesuite在把所有的測(cè)試用例組裝成testsuite,最后把testsiute傳給testrunner進(jìn)行執(zhí)行。
 而我們通常執(zhí)行的unittest.main(),其實(shí)就是unittest.testprom方法,其執(zhí)行的功能就是上面分析的三步,在第一步中其傳入的參數(shù)是自身的模塊__main__;
 在第二步中把自身模塊中的所有測(cè)試類中中的測(cè)試方法提取出來,并生成測(cè)試套件;最后再把測(cè)試套件傳遞給testrunner進(jìn)行具體的測(cè)試。
 
 最后給出一個(gè)完整的單元測(cè)試組織代碼,把該代碼放到單元測(cè)試用例文件的同一個(gè)目錄后執(zhí)行該腳本,即可執(zhí)行所有的測(cè)試用例文件。
 【測(cè)試用例文件必須為test開頭,如:testxxx.py, 當(dāng)然這個(gè)文件本身是一個(gè)單元測(cè)試的文件】

[python] view
plaincopy

  1. #!/usr/bin/env python

  2. #encoding: utf-8

  3. #該代碼源自深入python

  4. import unittest

  5. import myclass

  6. import re

  7. import os

  8. import sys



  9. def testAllinCurrent():

  10.     path = os.path.abspath(os.path.dirname(sys.argv[0]))

  11.     files = os.listdir(path)                           

  12.     test = re.compile("test\.py{1}quot;, re.IGNORECASE)      

  13.     files = filter(test.search, files)                 

  14.     filenameToModuleName = lambda f: os.path.splitext(f)[0]

  15.     moduleNames = map(filenameToModuleName, files)     

  16.     modules = map(__import__, moduleNames)


  17.     load = unittest.defaultTestLoader.loadTestsFromModule

  18.     return unittest.TestSuite(map(load, modules))


  19. if __name__ == "__main__":               

  20.     unittest.main(defaultTest="regressionTest")

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。

本文題目:python單元測(cè)試中unittest是怎樣的-創(chuàng)新互聯(lián)
文章來源:http://www.chinadenli.net/article20/djdijo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化外貿(mào)網(wǎng)站建設(shè)商城網(wǎng)站App開發(fā)品牌網(wǎng)站制作云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作