scriu o mulțime de teste unitare. Din păcate, codul meu necesită adesea patch-uri de maimuță pentru a fi testate în mod corespunzător unitate. Eu folosesc frecvent patch
funcția de Michael Foord mock library (acum disponibil în Python 3.4 ca unittest.mock) pentru a monkey patch codul meu.
în timp ce discutam cu alți utilizatori ai patch
, mi-am dat seama că toată lumea pare să aibă propriul mod preferat de ao folosi. În acest post voi discuta despre modurile în care folosesc patch-uri.,patch-ul poate fi folosit ca metodă decorator:
sau ca decorator de clasă:
folosesc patch-ul ca decorator atunci când am o funcție pe care vreau să o patch-uri în timpul întregului test. Am tendința de a nu folosi patch-uri ca decorator de clasă și voi explica de ce mai jos.
exemplu Decorator
Manager de Context
patch-ul poate fi folosit ca manager de context:
prefer să folosesc patch-ul ca manager de context atunci când vreau să corectez o funcție doar pentru o parte a unui test. Nu folosesc patch-uri ca un manager de context, atunci când vreau o funcție patch-uri pentru un întreg test.,
Context managerul de exemplu,
Manual folosind porni și opri
patch-uri pot fi, de asemenea, folosit pentru manual patch-uri/unpatch folosind start
și stop
metode:
eu prefer să folosesc patch-uri folosind start/stop, atunci când am nevoie de o funcție să fie patch-uri pentru fiecare funcție într-o clasa de test.acesta este probabil cel mai frecvent mod în care folosesc patch-uri în testele mele. De multe ori îmi grupez testele în clase de testare unde fiecare metodă este concentrată în jurul testării aceleiași funcții. Prin urmare, voi dori, de obicei, aceleași funcții/obiecte patch-uri pentru fiecare metodă de testare.,am menționat mai sus că prefer să nu folosesc decoratori de clasă pentru a rezolva această problemă. În schimb, prefer să folosesc atributele clasei de testare pentru a stoca referințe la funcțiile patch-uri în loc să Accept argumente patch pe fiecare metodă de testare cu decoratori. Mi se pare mai uscat.atenție: unul dintre beneficiile principale ale decorator / context manager forme de patch-uri este că se ocupe de curat pentru tine. Ori de câte ori apelați start
pentru a configura obiectul patch, amintiți-vă întotdeauna să apelați stop
pentru a-l curăța., În caz contrar, veți avea o funcție de maimuță patch-uri / obiect pentru restul programului de funcționare.
start și stop exemplu
rezumat
Patch-ul poate fi folosit:
- ca metodă sau decorator de clasă
- ca manager de context
- folosind metode de pornire și oprire
prefer ca testele mele să fie lizibile, uscate și ușor de modificat. Tind să folosesc metode de pornire / oprire din acest motiv, dar, de asemenea, folosesc frecvent decoratori de metode de patch-uri și uneori folosesc manageri de context patch-uri., Este util să cunoașteți diferitele arome ale patch
deoarece aroma dvs. preferată poate să nu fie întotdeauna cea mai potrivită pentru problema la îndemână.