Trey Hunner (Dansk)

Trey Hunner (Dansk)

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 startog 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:

  1. som metode eller klassedekoratør
  2. som kontekstmanager
  3. 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *