日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

再话单元测试unittest

發布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再话单元测试unittest 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? 單元測試自然是對程序中最小的可測試模塊--函數來進行測試;因為單元測試的對象是函數,也就是說你得被測試對象一定要有輸出結果,哪怕就是異常輸出,也得有輸出,以便單元測試模塊能夠捕獲返回值,并且與預期值進行比較,從而得出測試通過與否。

unittest主要概念:

  • 1. 一個TestCase的實例就是一個測試用例。什么是測試用例呢?就是一個完整的測試流程,包括測試前準備環境的搭建(setUp),執行測試代碼(run),以及測試后環境的還原(tearDown)。元測試(unit test)的本質也就在這里,一個測試用例是一個完整的測試單元,通過運行這個測試單元,可以對某一個問題進行驗證。
  • 2.而多個測試用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
  • 3.TestLoader是用來加載TestCase到TestSuite中的,其中有幾個loadTestsFrom__()方法,就是從各個地方尋找TestCase,創建它們的實例,然后add到TestSuite中,再返回一個TestSuite實例。
  • 4.TextTestRunner是來執行測試用例的,其中的run(test)會執行TestSuite/TestCase中的run(result)方法。
  • 對于單元測試中, 單元測試的加載方式有2種:
    • 1、通過unittest.main()來啟動單元測試的測試模塊;
    • 2、另一種是添加到testsuite集合中再加載所有的被測試對象,而testsuit里存放的就是單元測試的用例。下面分別列出了2種方法的使用。

    1、測試模塊中的函數
  • 被測試的模塊:
  • #mathfunc.pydef add(a, b):return a+bdef minus(a, b):return a-bdef multi(a, b):return a*bdef divide(a, b):return a/b

    單元測試模塊:

    #-*-coding:utf-8 -*-import unittest from mathfunc import *class TestMathFunc(unittest.TestCase):"Test mathfun.py"def setUp(self):print "do something before test.Prepare environment."def tearDown(self):print "do something after test.Clean up."def test_add(self):"Test method add(a,b)"print "add"self.assertEqual(3,add(1,2))self.assertNotEqual(3,add(2,4))def test_minus(self):"Test method minus(a,b)"print "minus"self.assertEqual(1,minus(3,2))def test_multi(self):"Test method multi(a,b)"print "multi"self.assertEqual(6,multi(2,3))def test_divide(self):"Test method divide(a,b)"print "divide"self.assertEqual(3,divide(6,2))self.assertEqual(2.5,divide(5,2))if __name__ == '__main__':unittest.main(verbosity = 2)

    輸出結果:


    2、測試模塊中的類方法

    被測模塊

    #encoding: utf-8 class myclass: def __init__(self): pass def sum(self, x, y): return x+y def sub(self, x, y): return x-y

    測試模塊:

    #encoding: utf-8 import unittest import myclass class mytest(unittest.TestCase): ##初始化工作 def setUp(self): self.tclass = myclass.myclass() ##實例化了被測試模塊中的類 #退出清理工作 def tearDown(self): pass #具體的測試用例,一定要以test開頭 def testsum(self): self.assertEqual(self.tclass.sum(1, 2), 3) if __name__ =='__main__': unittest.main()

    3、加載測試套件

    ? ? ? 在使用測試套件進行單元測試之前,首先來看一下unittest模塊有哪些屬性,其運作方式,以及根據實際情況如何使用測試套件。

    import unittest print dir(unittest) ['BaseTestSuite', 'FunctionTestCase', 'SkipTest', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult', 'TestSuite', 'TextTestResult', 'TextTestRunner', '_TextTestResult', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__unittest', 'case', 'defaultTestLoader', 'expectedFailure', 'findTestCases', 'getTestCaseNames','installHandler', 'loader', 'main', 'makeSuite', 'registerResult', 'removeHandler', 'removeResult','result', 'runner', 'signals', 'skip', 'skipIf', 'skipUnless', 'suite', 'util']

    知道了unittest有哪些方法和屬性之后,來看看這些方法和屬性的具體作用方便后續的調用

    memblist = ['FunctionTestCase', 'TestCase', 'TestLoader', 'TestProgram', 'TestResult',\ 'TestSuite','TextTestRunner', 'defaultTestLoader','findTestCases', 'getTestCaseNames', \ 'main', 'makeSuite'] for memb in memblist:cur = getattr(unittest,memb)print help(cur)

    輸出結果:

    ?FunctionTestCase:函數測試用例,即給一個函數作為參數,返回一個testcase實例,可選參數有set-up,tear-down方法
    ?TestCase:所有測試用例的基本類,給一個測試方法的名字,返回一個測試用例實例
    ?TestLoader:測試用例加載器,其包括多個加載測試用例的方法。返回一個測試套件
    ?loadTestsFromModule(self, module):根據給定的模塊實例來獲取測試用例套件

    ?loadTestsFromName(self, name, module=None)?根據給定的字符串來獲取測試用例套件,字符串可以是模塊名,測試類名,測試類中的測試方法名,或者一個可調用的是實例對象,這個實例對象返回一個測試用例或一個測試套件。

    ?loadTestsFromNames(self, names, module=None) :和上面功能相同,只不過接受的是字符串列表
    ?loadTestsFromTestCase(self, testCaseClass):根據給定的測試類,獲取其中的所有測試方法,并返回一個測試套件
    TestProgram:命令行進行單元測試的調用方法,作用是執行一個測試用例。其實unittest.main()方法執行的就是這個命令, 而這個類實例時默認加載當前執行的作為測試對象, 原型為 __init__(self, module='__main__', defaultTest=None, argv=None, testRunner=xx, testLoader=xx) 其中module='__main__'就是默認加載自身
    TestResult:測試用例的結果保存實例,通常有測試框架調用
    TestSuite:組織測試用例的實例,支持測試用例的添加和刪除,最終將傳遞給testRunner進行測試執行
    TextTestRunner:進行測試用例執行的實例,其中Text的意思是以文本形式顯示測試結果。顯示測試名稱,即完成的測試結? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 果,其過同執行單元測試腳本時添加-v參數
    defaultTestLoader:其實就是TestLoader
    findTestCasesgetTestCaseNames:這個2個就不用解釋了
    main:其實就是TestProgram

    makeSuite:通常是由單元測試框架調用的,用于生產testsuite對象的實例

    其實整個單元測試框架的邏輯出來了。分三步走:

  • testloader根據傳入的參數獲得相應的測試用例,即對應具體的測試方法,然后makesuite在把所有的測試用例組裝成testsuite,最后把testsiute傳給testrunner進行執行。而我們通常執行的unittest.main(),其實就是unittest.testprom方法,其執行的功能就是上面分析的三步,在第一步中其傳入的參數是自身的模塊__main__;
  • ?把自身模塊中的所有測試類中中的測試方法提取出來,并生成測試套件;最后再把測試套件傳遞給testrunner進行具體的測試。
  • ?給出一個完整的單元測試組織代碼,把該代碼放到單元測試用例文件的同一個目錄后執行該腳本,即可執行所有的測試用例文件。
  • Python 單元測試框架



    總結

    以上是生活随笔為你收集整理的再话单元测试unittest的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。