Fixtures är ett verktyg som definierar en Python kontrakt för återanvändbara stat / support logik, främst för enhetstestning. & Nbsp; Helper och anpassning logik ingår att göra det enkelt att skriva egna fixturer med hjälp av fixturer kontraktet. Lim-kod tillhandahålls som gör använder fixturer som möter Fixtures kontraktet i unittest kompatibla testfall enkelt och rakt framåt.
Varför Fixtures
Standard Python unittest.py ger ingen självklar metod för att göra och återanvända tillstånd behövs i ett testfall annat än genom att lägga till en metod på testklassen. Detta skalar dåligt - komplexa hjälpfunktioner uppföröknings upp en testklasshierarki är ett regelbundet mönster när detta är gjort. Förlöjliga medan ett bra verktyg inte själv förhindra detta (och medhjälpare att håna komplicerade saker kan ackumuleras på samma sätt om den placeras på testklassen).
Genom att definiera ett enhetligt avtal där hjälpare har ingen beroendet testklassen vi tillåter alla de vanliga kod hygienverksamhet ske utan snedvridande påverkan av att vara i en klasshierarki som är modellering en helt annan sak - vilket är vad medhjälpare på ett testfall lider av.
Om Fixtures
En Fixtur representerar någon stat. Varje fixtur har attribut på det som är specifika för fixturen. Till exempel kan en fixtur som representerar en katalog som kan användas för temporära filer har ett attribut "stig".
Skapa Fixtures
Minimalt, underklass Fixtur, definiera setup för att initiera ditt tillstånd och schemalägga en sanering för när rensningen är heter och du är klar:
>>> Import unittest
>>> import fixturer
>>> Klass NoddyFixture (fixtures.Fixture):
... Def Setup (själv):
... Super (NoddyFixture, själv) .SEt.UP ()
... Self.frobnozzle = 42
... Self.addCleanup (delattr, själv, "frobnozzle ')
Detta kommer att initiera frobnozzle när installationen är heter, och när CLEANUP kallas bli av med frobnozzle attributet.
Det finns en hjälpreda för att anpassa en funktion eller funktion paret i Fixtures. det sätter resultatet av funktionen i fn_result:
>>> Import os.path
>>> Import shutil
>>> Import cacheminnet
>>> Def setup_function ():
... Tillbaka tempfile.mkdtemp ()
>>> Def teardown_function (fixtur):
... Shutil.rmtree (fixtur)
>>> Fixturen = fixtures.FunctionFixture (setup_function, teardown_function)
>>> Fixture.setUp ()
>>> Utskrifts os.path.isdir (fixture.fn_result)
Sann
>>> Fixture.cleanUp ()
fixturen API
Exemplet ovan introducerar några av fixturen API. För att kunna städa upp efter en fixtur har använts, alla inventarier definierar en rengöringsmetod som bör kallas vid en fixtur är klar med.
Eftersom dess trevligt att kunna bygga en särskild uppsättning relaterade fixturer i förväg för att använda dem, fixturer har dessutom definiera ett säkerhetsmetod som bör kallas innan du försöker använda dem.
En vanlig önskan med armaturer som är dyra att skapa är att återanvända dem i många testfall; att stödja denna basfixturen definierar också en återställning som kallar self.cleanUp (); self.setUp (). Fixturer som kan mer effektivt göra sig återanvändbara bör åsidosätta denna metod. Detta kan sedan användas med flera provningstillstånd via saker som testresources, setUpClass eller setUpModule.
När du använder en fixtur med en test kan du manuellt kalla upp och rengöringsmetoder. Bekvämare är dock att använda den medföljande lim från fixtures.TestWithFixtures som ger en mixin definierar useFixture (kamel fallet eftersom unittest är kamel fallet hela) metoden. Det kommer Samtalsval på fixturen, ring self.addCleanup (fixtur) att schemalägga en rensning, och returnera fixturen. Detta låter en skriv:
>>> import testtools
>>> Import unittest
Notera att vi använder testtools testfall här som vi behöver för att garantera en TestCase.addCleanup metod.
& Nbsp; >>> klass NoddyTest (testtools.TestCase, fixtures.TestWithFixtures):
& Nbsp; ... def test_example (själv):
& Nbsp; ... fixtur = self.useFixture (NoddyFixture ())
& Nbsp; ... self.assertEqual (42, fixture.frobnozzle)
& Nbsp; >>> resultat = unittest.TestResult ()
& Nbsp;. >>> _ = NoddyTest ('test_example ") kör (resultat)
& Nbsp; >>> utskrift result.wasSuccessful ()
& Nbsp; Sann
Fixtures genomföra sammanhanget protokollet, så du kan också använda en fixtur som ett sammanhang chef:
>>> Med fixtures.FunctionFixture (setup_function, teardown_function) som fixtur:
... Print os.path.isdir (fixture.fn_result)
Sann
Krav :
- Python
Kommentarer hittades inte