Trey Hunner (Svenska)

Trey Hunner (Svenska)

jag skriver en hel del enhetstester. Tyvärr kräver min kod ofta apa lapp för att vara korrekt enhetstestad. Jag använder ofta funktionen patch från Michael Foords mock library (nu tillgänglig i Python 3.4 som unittest.mock) till monkey patch min kod.

När du chattar med andra användare av patch insåg jag att alla verkar ha sitt eget favorit sätt att använda det. I det här inlägget kommer jag att diskutera hur jag använder patch.,

dekoratör

patch kan användas som en metod dekoratör:

eller som en klass dekoratör:

Jag använder patch som dekoratör när jag har en funktion Jag vill lappa under hela mitt test. Jag brukar inte använda patch som en klass dekoratör och jag ska förklara varför nedan.

Dekoratörsexempel

Kontexthanterare

patch kan användas som kontexthanterare:

Jag föredrar att använda patch som kontexthanterare när jag vill lappa en funktion för endast en del av ett test. Jag använder inte patch som kontexthanterare när jag vill ha en funktion patchad för ett helt test.,

exempel på Kontexthanterare

manuellt med start och stopp

patch kan också användas för att manuellt lappa/packa upp medstart ochstop metoder:

Jag föredrar att använda patch med start / stop när jag behöver en funktion som ska lappas för varje funktion i en testklass.

detta är förmodligen det vanligaste sättet jag använder patch i mina tester. Jag grupperar ofta mina tester i testklasser där varje metod är fokuserad kring att testa samma funktion. Därför vill jag vanligtvis ha samma funktioner / Objekt patched för varje testmetod.,

Jag noterade ovan att jag föredrar att inte använda klassdekoratorer för att lösa detta problem. Istället föredrar jag att använda testklassattribut för att lagra referenser till patchade funktioner istället för att acceptera patchargument på varje testmetod med dekoratörer. Jag tycker att det här är mer torrt.

Varning: En av de främsta fördelarna med decorator / context manager former av patch är att de hanterar städa upp för dig. När du anropar start för att ställa in ditt patchobjekt, kom alltid ihåg att ringa stop för att städa upp det., Annars har du en apa lappad funktion / objekt för resten av ditt program som körs.

starta och stoppa exempel

sammanfattning

Patch kan användas:

  1. som en metod eller klass dekoratör
  2. som en kontexthanterare
  3. använda start-och stoppmetoder

Jag föredrar att mina tester är läsbara, torra och lätta att ändra. Jag brukar använda start / stop-metoder av den anledningen, men jag använder också ofta patch method decorators och använder ibland patch context managers., Det är användbart att känna till de olika smakerna av patch eftersom din favoritsmak kanske inte alltid är den mest lämpliga för problemet till hands.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *