Fixtures is 'n instrument wat definieer 'n Python kontrak vir herbruikbare staat / ondersteuning logika, hoofsaaklik vir eenheid toets nbsp &;. Helper en aanpassing logika is ingesluit om te maak dit maklik om jou eie wedstryde met behulp van die wedstryde kontrak te skryf. Gom-kode word verskaf wat maak gebruik van wedstryde wat aan die Fixtures kontrak in unittest versoenbaar toets gevalle maklik en reguit vorentoe.
Hoekom Fixtures
Standard Python unittest.py bied geen duidelike metode vir die maak en hergebruik staat nodig in 'n toets geval anders as deur die toevoeging van 'n metode van die toets-klas. Dit skale swak - kompleks helper funksies propogating 'n toets klas hiërargie is 'n gereelde patroon wanneer dit gedoen word. Spot, terwyl 'n groot hulpmiddel nie self voorkom (en helpers komplekse dinge kan ophoop in die dieselfde manier te bespot as op die toets-klas geplaas).
Deur die definisie van 'n eenvormige kontrak waar helpers het geen afhanklikheid van die toets-klas wat ons toelaat om al die gereelde kode higiëne aktiwiteite plaasvind sonder die verdraai invloed daarvan om in 'n klas hiërargie wat modellering 'n heeltemal ander ding - en dit is wat helpers op 'n toets besluit ly.
About Fixtures
'N wedstryd verteenwoordig 'n staat. Elke wedstryd het eienskappe op dit wat eie is aan die wedstryd. Byvoorbeeld, kan 'n wedstryd wat 'n gids wat gebruik kan word vir tydelike lêers het 'n kenmerk 'pad'.
Skep Fixtures
Minimaal, subklas afskoptye, definieer die opstel van jou toestand te inisialiseer en skeduleer 'n opruim wanneer opruim genoem en wat jy gedoen:
>>> Invoer unittest
>>> Invoer wedstryde
>>> Klas NoddyFixture (fixtures.Fixture):
... Def Setup (self):
... Super (NoddyFixture, self) .setUp ()
... Self.frobnozzle = 42
... Self.addCleanup (delattr, self, 'frobnozzle')
Dit sal inisialiseer frobnozzle wanneer die opstel genoem word, en wanneer opruim genoem ontslae te raak van die frobnozzle kenmerk.
Daar is 'n helper vir die aanpassing van 'n funksie of funksies paar in wedstryde. dit sit die resultaat van die funksie in fn_result:
>>> Invoer os.path
>>> Invoer shutil
>>> Invoer temp file
>>> Def setup_function ():
... Terug tempfile.mkdtemp ()
>>> Def teardown_function (wedstryd):
... Shutil.rmtree (wedstryd)
>>> Wedstryd = fixtures.FunctionFixture (setup_function, teardown_function)
>>> Fixture.setUp ()
>>> Druk os.path.isdir (fixture.fn_result)
True
>>> Fixture.cleanUp ()
Die afskoptye API
Die voorbeeld hierbo stel sommige van die Wedstryd API. In staat te wees om skoon te maak ná 'n wedstryd is gebruik, al wedstryde definieer 'n opruim metode wat genoem moet word wanneer 'n wedstryd is klaar met.
Omdat sy mooi te wees om 'n spesifieke stel van verwante toebehore te bou in die opmars van die gebruik van hulle, wedstryde het ook 'n opstel van metode wat voor probeer om dit te gebruik genoem moet word, definieer.
Een gemeenskaplike begeerte met wedstryde wat duur is om te skep, is om hulle te onthou in baie toets gevalle; te ondersteun hierdie die basis afskoptye definieer ook 'n reset wat noem self.cleanUp (); self.setUp (). Wedstryde wat kan meer doeltreffend te maak hulself herbruikbare moet hierdie metode omseil. Dit kan dan gebruik word met verskeie toets staat via dinge soos testresources, setUpClass, of setUpModule.
By die gebruik van 'n wedstryd met 'n toets wat jy kan met die hand bel die opstel en opruim metodes. Meer gerieflik al is die ingesluit gom te gebruik van fixtures.TestWithFixtures wat 'n mixin definieer useFixture (kameel geval omdat unittest is kameel geval regdeur) metode. Dit sal die opstel van 'n beroep op die wedstryd, bel self.addCleanup (wedstryd) 'n opruim te skeduleer, en die standaard van die wedstryd. Dit laat die een skryf:
>>> Invoer testtools
>>> Invoer unittest
Let daarop dat ons gebruik testtools toets besluit hier as ons 'n TestCase.addCleanup metode te waarborg.
& Nbsp; >>> klas NoddyTest (testtools.TestCase, fixtures.TestWithFixtures):
& Nbsp; ... def test_example (self):
& Nbsp; ... wedstryd = self.useFixture (NoddyFixture ())
& Nbsp; ... self.assertEqual (42, fixture.frobnozzle)
& Nbsp; >>> gevolg = unittest.TestResult ()
& Nbsp;. >>> _ = NoddyTest ('test_example') loop (gevolg)
& Nbsp; >>> druk result.wasSuccessful ()
& Nbsp; True
Wedstryde implementeer die konteks protokol, sodat jy kan ook gebruik om 'n wedstryd as 'n konteks bestuurder:
>>> Met fixtures.FunctionFixture (setup_function, teardown_function) as wedstryd:
... Druk os.path.isdir (fixture.fn_result)
Ware
Vereistes :
- Python
Kommentaar nie gevind