unittest 類(lèi)和模塊夾具

2022-08-04 17:36 更新

類(lèi)和模塊級(jí)別的固定裝置在中實(shí)現(xiàn)TestSuite。當(dāng)測(cè)試套件遇到來(lái)自新類(lèi)的測(cè)試時(shí),則tearDownClass()從前一個(gè)類(lèi)(如果有的話)被調(diào)用,然后setUpClass()從新類(lèi)中調(diào)用。

類(lèi)似地,如果測(cè)試來(lái)自與先前測(cè)試不同的模塊,tearDownModule則從之前的模塊開(kāi)始運(yùn)行,然后setUpModule從新模塊運(yùn)行。

在所有測(cè)試運(yùn)行最后tearDownClass并且tearDownModule運(yùn)行之后。

請(qǐng)注意,共享裝置在測(cè)試并行化等潛在功能方面表現(xiàn)不佳,并且會(huì)破壞測(cè)試隔離。他們應(yīng)該小心使用。

由unittest測(cè)試加載器創(chuàng)建的測(cè)試的默認(rèn)排序是將來(lái)自相同模塊和類(lèi)的所有測(cè)試分組在一起。這將導(dǎo)致setUpClass/ setUpModule(等)每個(gè)類(lèi)和模塊只被調(diào)用一次。如果隨機(jī)化訂單,以便來(lái)自不同模塊和類(lèi)的測(cè)試彼此相鄰,則可以在單次測(cè)試中多次調(diào)用這些共享夾具功能。

共享燈具不適用于具有非標(biāo)準(zhǔn)訂購(gòu)的套件。一個(gè)BaseTestSuite仍然存在不希望支持共享夾具框架。

如果在共享夾具功能之一中發(fā)生任何異常,則測(cè)試報(bào)告為錯(cuò)誤。因?yàn)闆](méi)有相應(yīng)的測(cè)試實(shí)例,所以創(chuàng)建一個(gè)_ErrorHolder對(duì)象(與a具有相同的接口TestCase)來(lái)表示錯(cuò)誤。如果你只是使用標(biāo)準(zhǔn)的unittest測(cè)試運(yùn)行器,那么這個(gè)細(xì)節(jié)并不重要,但如果你是一個(gè)框架作者,它可能是相關(guān)的。

 setUpClass和tearDownClass

這些必須作為類(lèi)方法來(lái)實(shí)現(xiàn):

import unittest

class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls._connection = createExpensiveConnectionObject()

    @classmethod
    def tearDownClass(cls):
        cls._connection.destroy()

如果您希望setUpClass和tearDownClass呼吁然后在基類(lèi)必須調(diào)用由他們自己。這些實(shí)現(xiàn)TestCase是空的。

如果在此期間發(fā)生異常setUpClass,則類(lèi)中的測(cè)試未運(yùn)行tearDownClass且未運(yùn)行。被跳過(guò)的班級(jí)不會(huì)有setUpClass或tearDownClass運(yùn)行。如果異常是一個(gè)SkipTest異常,那么該類(lèi)將被報(bào)告為被跳過(guò)而不是作為錯(cuò)誤。

setUpModule和tearDownModule

這些應(yīng)該作為函數(shù)來(lái)實(shí)現(xiàn):

def setUpModule():
    createConnection()

def tearDownModule():
    closeConnection()

如果在某個(gè)時(shí)候發(fā)生異常setUpModule,則模塊中的所有測(cè)試都不會(huì)運(yùn)行,并且tearDownModule不會(huì)運(yùn)行。如果異常是一個(gè)SkipTest異常,那么該模塊將被報(bào)告為被跳過(guò)而不是錯(cuò)誤。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)