類(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)的。
這些必須作為類(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ò)誤。
這些應(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ò)誤。
更多建議: