szembenéztem a baj ál.patch és parameterized és megnézte, hogyan működnek ezek általában így írnék itt. Ez a bejegyzés elmagyarázza, hogyan mock.,patch díszíteni általában paraméterezett lesz magyarázható más utáni később.
mindenekelőtt hadd fejezzem be az alapvető dolgot a mock számára.patch írásban egyszerű python teszt.
alapvetően helyettesíthetjük az objektumot, amelyet a “mock” első argumentumaként határozunk meg.patch ” a MagicMock példány vagy bármely objektum megadott, mint egy második érv. Ez nagyon hasznos, ha írsz egység teszt, hogy ellenőrizzék más modul viselkedését a vizsgált modul függ.
Ha a mintakód felett végrehajtotta, a kimenet a következőképpen néz ki:
“mock.patch ” úgy tűnik, megfelelően működik, mint látható.,
valójában sok más módja van a javítás használatának. Pl. a “with statement” és a “start method, end method” … de ez a bejegyzés középpontjában elmagyarázza dekorátor használat. Merüljünk el a gúnyolódásban.patch decorator
A függvény generálni mock.patch decorator
idézett fontos pont a tényleges forráskód és bellow kód a tényleges lakberendező használt, amikor írunk ” @mock.,patch (target) ”
alapvetően ez a funkció generálja a decorator függvény “getter”, amely a függvény, hogy visszatérjen a tényleges objektum, amelynek attribútum szeretne cserélni, és” attribútum”, amely a neve a kívánt objektumot cserélni. ezután generál “_patch osztály” objektum, amely lesz lakberendező ezekkel.
mivel valószínűleg csak a szöveggel való magyarázat nem könnyű dolog, ezért hadd írjak python kódot, mint az első példa. bellow kód kivonatok fenti minta kód.,
import os
import [email protected]("os.listdir", mock.MagicMock(return_value="test1"))
def test1():
assert "test1" == os.listdir()
ezt a következőképpen lehet írni:
Ha többet szétszerelünk, akkor a kód
most világossá vált, hogy mi a mock.patch tette, ugye?
de még mindig van nagy fekete doboz úgynevezett ” mock.mock._patch “és ez volt a legérdekesebb pont, így lépés előre, hogy nézd meg belül” mock.mock._patch”.
belső dekorátor (mock.mock._patch)
Ez úgy tűnik, hogy a függvény a névből feltételezi, hogy ennek a hívható objektumnak a neve nem a capital karakterből indul, hanem valójában ez az osztály a patch core logika végrehajtására., Bár azt mondtam, hogy sok módja van a “mock” használatának / hívásának.patch”, a különbségek csak, hogyan kell hívni(frontend rész), valamint az összes módszer végül használja “mock.mock._patch ” osztály elérése patch logika, így olvasás ez értelmes, ha érdekes, hogy patch belső.
lássuk a kódot, de egy dolog, amit emlékeztetnem kell. Sokat szerkesztettem a kódot, még inkább a innen látható kódot nem lehet végrehajtani, ezért úgy gondolja, hogy python, mint pszeudo kód. Azt akartam, hogy ez egyszerű, amennyire csak lehetséges, hogy könnyen érthető ez a pszeudo kódot., Ha el akarja olvasni a tényleges kódot, menjen a github-ba.
sok megjegyzést adtam hozzá, ezért azt akarom, hogy olvassa el ezeket, mielőtt továbblépne. Kiegészítésként hadd soroljam fel azokat a pontokat, amelyeket szeretném, ha észrevennéd., támogatási osztály funkció
Ez az áttekintés arról, hogyan mock.patch alkalmazott, és ha érti, hogy ide, valószínűleg nem nehéz tudni, hogy több részletet, mint hogyan kell cserélni, majd rollback…és bármi … csak olvassa el a kódot, ha azt szeretné,.,
mint utolsó dolog, írnám a Python szkriptet, amely elmagyarázza, mit magyaráztam
Ez az előző minta alapján jön létre. Ez a szkript annak ellenőrzésére szolgál, hogy a függvényt az “id” beépített függvény megváltoztatja-e vagy sem, majd az utolsó lépésként ellenőrizze a “patchings” függvénylistát. Tehát nézzük meg az eredményt
amint látja, a test1 azonosítója 4506785744 volt, mielőtt bármilyen javítást alkalmazna, majd az első tapasz után 4514980040-re változott, de a második javítás nem változtatta meg a funkció azonosítóját, ami bizonyította, hogy a funkciót nem változtatták meg a javítás első alkalmazásakor., Az utolsó lépés bizonyult test1 funkció minden patch objektum alkalmaztam 3 lépésben.
összefoglaló
a mock and patch-et egy olyan korban használtam, amikor írási egység tesztet írtam, de még nem olvastam át a kódot, így az olvasás nagyon érdekes volt, és megtudtam néhány olyan információt, amelyet korábban nem tudtam. pontosabban, hogyan patch díszíteni / változtatni az eredeti funkció jó betekintést, amikor írok kódot.
A következő bejegyzés ismét a “parameterized”
teszthez kapcsolódó python könyvtárak egyikének magyarázata lesz