unittest 幾個重要概念


          unittest是一個python版本的junit,junit是java中的單元測試框架,unittest實現了很多junit中的概念,比如我們非常熟悉的test case, test suite等,總之,原理都是相通的,只是用不同的語言表達出來。

           unittest中的4個重要的概念:test fixture, test case, test suite, test runner,我覺得只有理解了這幾個概念,才能真正的理解單元測試的基本原理,下面就主要圍繞這幾個概念來展開這篇文章。

1、Test Case

一個TestCase的實例就是一個測試用例。什么是測試用例呢?就是一個完整的測試流程,包括測試前准備環境的搭建(setUp),執行測試代 碼(run),以及測試后環境的還原(tearDown)。單元測試(unit test)的本質也就在這里,一個測試用例是一個完整的測試單元,通過運行這個測試單元,可以對某一個問題進行驗證。

2、Test Suite

一個功能的驗證往往需要多個測試用例,可以把多個測試用例集合在一起執行的,就是TestSuite,TestSuit用來組裝單個測試用例,可以通過addTest加載到TestCase到TestSuit中,從而返回一個TestSuit實例;而且TestSuite也可以嵌套TestSuite。

(TestLoader是用來加載TestCase到TestSuite中的,其中有幾個loadTestsFrom__()方法,就是從各個地方尋找TestCase,創建它們的實例,然后add到TestSuite中,再返回一個TestSuite實例)

3、TestRunner

測試的執行也是單元測試中非常重要的一個概念,一般單元測試框架中都會提供非常豐富的執行策略和執行結果;在unittest中,通過TextTestRunner是來執行測試用例的,其中的run(test)會執行TestSuite/TestCase中的run(result)方法。測試的結果會保存到TextTestResult實例中,包括運行了多少測試用例,成功了多少,失敗了多少等信息。TestRunner可以使用圖形界面、文本界面,或者返回一個特殊的值的方式來表示測試執行結果。

(這樣整個流程就清楚了,首先是要寫好TestCase,然后由TestLoader加載TestCase到TestSuite,然后由 TextTestRunner來運行TestSuite,運行的結果保存在TextTestResult中,整個過程集成在unittest.main模 塊中

4、Test Fixture

  對一個測試用例環境的搭建和銷毀,是一個fixture,通過覆蓋TestCase的setUp()和tearDown()方法 來實現。這個有什么用呢?比如說在這個測試用例中需要訪問數據庫,那么可以在setUp()中建立數據庫連接以及進行一些初始化,在tearDown() 中清除在數據庫中產生的數據,然后關閉連接。注意tearDown的過程很重要,要為以后的TestCase留下一個干凈的環境。關於fixture,還 有一個專門的庫函數叫做fixtures,功能更加強大,詳細介紹可以查閱相應的函數庫資料。

下面以一個小例子來說明一下這幾個用法

首先編寫需要引入的方法test_Count.py

class Count:
    def __init__(self,a,b):
        self.a=int(a)
        self.b=int(b)
    def add(self):
        return self.a+self.b

  定義一個Count類,有兩個參數,定義一個方法,實現兩個參數想加

接着寫實現該方法測試腳本test_TestCount.py

rom test_Count import Count
import unittest
class TestCount(unittest.TestCase):
    def setUp(self):
        print("test start")
    def test_add(self):
        j=Count(5,6)
        self.assertEqual(j.add(),11)
        
    def test_add2(self):
        j=Count(12,11)
        self.assertEqual(j.add(),23)
        
    def tearDown(self):
        print("test end")
if __name__=='__main__':
        suite=unittest.TestSuite()
        suite.addTest(TestCount("test_add2"))
        suite.addTest(TestCount("test_add"))
        runner=unittest.TextTestRunner()
        runner.run(suite)

  首先引入Test_Count中的Count類,接着在引入unittest框架;然后重寫TestCase里面的方法,包括setUp()、測試方法、tearDown();最后在在main下調用unittest框架的TestSuite()類來創建測試套件。通過他提供的addTest()方法來添加測試用例“test_add()”、“test_add()”,再調用unittest框架的TextTestRunner()類,通過它下面的runn()方法來運行suite所組裝的測試用例

執行結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM