hogyan mock.javítás lakberendező működik a python

Yuki Nishiwaki

Kövesse

Feb 23, 2018 · 5 min olvassa el a

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ó

  • Ha lakberendező használt osztály, a módszer, amelynek neve “test_” osztály lesz díszített által másolt lakberendező (belsőleg használja funkció lakberendező)
  • A funkció lakberendező (def decorate_callable)’s a viselkedés, megváltozik, attól függően, hogy hány patch használata egy módszer,
  • Első patch-dekoráció vissza fog térni az új belső módszer(def folt), amely “patchings” lista-beleértve az önfoglalkoztatást, de a második patch dekoráció, ez a javítás dekoráció csak hozzá egyéni, hogy “patchings” lista díszített funkció vissza eredeti funkció.,
  • folt funkció, amely vissza, amikor patch dekoráció értékelték először alapvetően ellenőrizze “patchings” listát, és próbálja cserélni az összes objektumot a listában, ez az iterációs logika “patchings” lista lehetővé teszi a felhasználó számára, hogy adja meg a több patch decorator.
  • 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

    Leave a Comment