Trey Hunner

Trey Hunner

Ik schrijf veel unit tests. Helaas vereist mijn code vaak dat monkey patching correct wordt getest. Ik gebruik vaak de functie patch uit Michael Foord ‘ s mock library (nu beschikbaar in Python 3.4 als unittest.mock) om aap patch mijn code.

tijdens het chatten met andere gebruikers van patch, realiseerde ik me dat iedereen zijn eigen favoriete manier lijkt te hebben om het te gebruiken. In dit bericht zal ik de manieren waarop ik patch gebruiken bespreken.,

Decorator

patch kan worden gebruikt als methode decorator:

of als klasse decorator:

Ik gebruik patch Als decorator wanneer ik een functie heb die ik tijdens mijn hele test wil patchen. Ik heb de neiging om patch niet te gebruiken als een klasse decorateur en Ik zal uitleggen waarom hieronder.

Decorator voorbeeld

Context Manager

patch kan worden gebruikt als context manager:

Ik gebruik liever patch als context manager wanneer ik een functie slechts voor een deel van een test wil patchen. Ik gebruik patch niet als context manager wanneer ik een functie wil patchen voor een hele test.,

Contextmanager voorbeeld

handmatig met start en stop

patch kan ook worden gebruikt om handmatig te patchen / uitpakken met start en stop methoden:

Ik gebruik liever patch met start/stop als ik een functie nodig heb die moet worden gepatcht voor elke functie in een testklasse.

Dit is waarschijnlijk de meest voorkomende manier waarop ik patch gebruik in mijn tests. Ik groepeer mijn tests vaak in testklassen waar elke methode is gericht op het testen van dezelfde functie. Daarom zal ik meestal dezelfde functies/objecten gepatcht voor elke testmethode.,

Ik merkte hierboven op dat ik liever geen class decorators gebruik om dit probleem op te lossen. In plaats daarvan gebruik ik liever Test class attributen om verwijzingen naar gepatchte functies op te slaan in plaats van patchargumenten te accepteren op elke testmethode met decorateurs. Ik vind dit DROOGTER.

Waarschuwing: Een van de belangrijkste voordelen van de vormen van Patch voor decorator/context manager is dat ze opruimen voor u afhandelen. Wanneer u start aanroept om uw patch-object in te stellen, vergeet dan altijd stop aan te roepen om het op te schonen., Anders heb je een monkey patched functie/object voor de rest van je lopende programma.

start en stop voorbeeld

samenvatting

Patch kan worden gebruikt:

  1. als methode of klasse decorator
  2. als context manager
  3. met behulp van start en stop methoden

Ik geef de voorkeur aan leesbaar, droog en gemakkelijk te wijzigen. Ik heb de neiging om start/stop methoden te gebruiken om die reden, maar ik gebruik ook vaak patch methode decorateurs en soms gebruik maken van patch context managers., Het is handig om de verschillende smaken van patch te kennen, omdat uw favoriete smaak niet altijd de meest geschikte is voor het probleem.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *