sok egységtesztet írok. Sajnos a kódom gyakran megköveteli, hogy a majom foltot megfelelően teszteljék. Gyakran használom a patch
függvényt Michael Foord álkönyvtárából (már elérhető a Python 3.4-ben unittest néven.mock) a majom patch kódom.
apatch
többi felhasználójával folytatott beszélgetés közben rájöttem, hogy mindenkinek megvan a saját kedvenc módja annak használatára. Ebben a bejegyzésben fogom megvitatni a módját használom patch.,
Decorator
patch lehet használni, mint egy módszer dekoratőr:
vagy egy osztály dekoratőr:
használom patch, mint egy dekoratőr, ha van egy funkció Szeretnék folt során az egész teszt. Én inkább nem használ patch, mint egy osztály lakberendező, majd elmagyarázom, hogy miért az alábbiakban.
Decorator példa
Context Manager
patch lehet használni, mint egy context manager:
inkább használni patch, mint egy kontextus menedzser, ha azt akarom, hogy patch egy függvény csak egy része a teszt. Nem használom a patch-et kontextuskezelőként, amikor egy teljes teszthez javított funkciót akarok.,
Context manager example
manuálisan start és stop
patch is használható manuálisan patch / unpatch segítségével start
és stop
módszerek:
inkább a javítás használata a start / stop, Ha szükségem van egy függvényt kell patched minden funkció egy teszt osztály.
Ez talán a leggyakoribb módja annak, hogy javítást használjak a tesztjeimben. Gyakran csoportosítom a tesztjeimet tesztosztályokba, ahol minden módszer ugyanazon funkció tesztelésére összpontosít. Ezért általában ugyanazokat a funkciókat / objektumokat szeretném minden tesztmódszerhez rögzíteni.,
fentebb megjegyeztem, hogy inkább nem használok osztály dekorátorokat a probléma megoldására. Ehelyett inkább a tesztosztály attribútumait használom a javított funkciókra való hivatkozások tárolására, ahelyett, hogy minden tesztmódszeren javító argumentumokat fogadnék el dekorátorokkal. Szárazabbnak találom.
figyelmeztetés: Az egyik elsődleges előnye a lakberendező / context manager formák patch, hogy kezelni tisztítsák meg az Ön számára. Amikor a start
– ot hívja a patch objektum beállításához, mindig ne felejtse el felhívni a stop
– t a tisztításhoz., Ellenkező esetben lesz egy majom folt funkció / objektum a többi futó program.
start and stop example
összefoglaló
Patch használható:
- módszerként vagy osztály dekorátorként
- kontextuskezelőként
- start and stop methods
inkább a tesztjeim olvashatóak, szárazak és könnyen módosíthatók. Ezért inkább a start / stop módszereket használom, de gyakran használom a patch method dekorátorokat is, néha pedig a patch context menedzsereket., Hasznos tudni a patch
különböző ízeit, mert a kedvenc ízed nem mindig a legmegfelelőbb a szóban forgó problémára.