Jeg skriver mange enhedstest. Desværre kræver min kode ofte, at abepatching skal testes korrekt. Jeg bruger ofte funktionen patch
fra Michael Foords mock library (nu tilgængelig i Python 3.4 som unittest.mock) til abe patch min kode.
mens jeg chatter med andre brugere af patch
, indså jeg, at alle synes at have deres egen foretrukne måde at bruge den på. I dette indlæg vil jeg diskutere de måder, jeg bruger patch.,
Dekoratør
patch kan bruges som en metode dekoratør:
eller som en klasse dekoratør:
jeg bruger patch som dekoratør, når jeg har en funktion jeg ønsker lappet under hele min test. Jeg har en tendens til ikke at bruge patch som klassedekoratør, og jeg vil forklare hvorfor nedenfor.
dekoratør eksempel
Kontekstmanager
patch kan bruges som kontekstmanager:
Jeg foretrækker at bruge patch som kontekstmanager, når jeg kun vil lappe en funktion til en del af en test. Jeg bruger ikke patch som en Conte .t manager, når jeg ønsker en funktion lappet for en hel test.,
Conte .t manager eksempel
manuelt brug af start og stop
patch kan også bruges til manuelt at lappe/unpatch ved hjælp af start
og stop
metoder:
Jeg foretrækker at bruge patch ved hjælp af start / stop, når jeg har brug for en funktion, der skal lappes for hver funktion i en testklasse.
Dette er nok den mest almindelige måde, jeg bruger patch i mine test. Jeg grupperer ofte mine test i testklasser, hvor hver metode er fokuseret på at teste den samme funktion. Derfor vil jeg normalt ønsker de samme funktioner/Objekter lappet for hver testmetode.,
Jeg bemærkede ovenfor, at jeg foretrækker ikke at bruge klassedekoratører til at løse dette problem. I stedet foretrækker jeg at bruge testklasseattributter til at gemme referencer til lappede funktioner i stedet for at acceptere patch-argumenter på hver testmetode med dekoratører. Jeg finder det mere tørt.Advarsel: En af de primære fordele ved dekoratør / Conte .t manager former for patch er, at de håndterer rydde op for dig. Når du ringer start
for at konfigurere dit patchobjekt, skal du altid huske at ringe til stop
for at rydde op., Ellers vil du have en abe lappet funktion/objekt for resten af dit kørende program.
start og stop eksempel
resum can
Patch kan bruges:
- som metode eller klassedekoratør
- som kontekstmanager
- ved hjælp af start og stop metoder
Jeg foretrækker, at mine test er læsbare, tørre og lette at ændre. Jeg har en tendens til at bruge start/stop-metoder af den grund, men jeg bruger også ofte patch-metodedekoratører og bruger undertiden patch-kontekstledere., Det er nyttigt at kende de forskellige smag af patch
fordi din yndlingssmag måske ikke altid er den mest egnede til det aktuelle problem.