píšu spoustu jednotkových testů. Bohužel, můj kód často vyžaduje opičí záplatování, aby byl řádně testován. Já často používají patch
funkce od Michaela Foord vysmívat knihovna (nyní k dispozici v Pythonu 3.4 jako unittest.mock), aby opičák opravil můj kód.
při chatování s ostatními uživateli patch
jsem si uvědomil, že každý má svůj vlastní oblíbený způsob, jak jej použít. V tomto příspěvku budu diskutovat o způsobech, jak používám patch.,
Malíř
patch může být použit jako metoda malíř:
nebo jako třída malíř:
já používám náplast jako malíř, když mám funkci chci oprava během celého testu. Mám tendenci nepoužívat náplast jako třídní dekoratér a vysvětlím, proč níže.
dekorátor příklad
Správce kontextu
patch lze použít jako správce kontextu:
dávám přednost použití patch jako správce kontextu, když chci opravit funkci pouze pro část testu. Nepoužívám patch jako správce kontextu, když chci funkci opravenou pro celý test.,
Context manager příklad
Ručně pomocí start a stop
náplasti mohou být také použity ruční oprava/unpatch pomocí start
stop
metody:
já raději používat náplast pomocí start/stop, když potřebuju funkce, které mají být oprava pro každou funkci v testovací třídě.
toto je pravděpodobně nejběžnější způsob, jak používám patch v mých testech. Často seskupuji své testy do testovacích tříd, kde je každá metoda zaměřena na testování stejné funkce. Proto budu obvykle chtít stejné funkce/objekty opravené pro každou zkušební metodu.,
výše jsem poznamenal, že k vyřešení tohoto problému raději nepoužívám třídní dekoratéry. Místo toho raději používám atributy testovací třídy k ukládání odkazů na opravené funkce namísto přijímání argumentů opravy u každé zkušební metody s dekoratéry. Připadá mi to suchější.
varování: jednou z hlavních výhod dekoratér / context manager formy náplasti je, že zvládnout vyčistit pro vás. Kdykoli budete volat start
nastavit vaše oprava objektu, vždy pamatujte na volání stop
je vyčistit., V opačném případě budete mít opici opravenou funkci / objekt pro zbytek běžícího programu.
start a stop příklad
Shrnutí
Patch může být použit:
- jako metoda nebo třída malíř
- jako kontext manager
- pomocí tlačítek start a stop metody
mám raději testy, které mají být čitelné, SUCHÉ, a snadno změnit. Z tohoto důvodu mám tendenci používat metody start/stop, ale také často používám dekorátory metod patch a někdy používám Správce kontextu patch., Je užitečné znát různé příchutě patch
, protože vaše oblíbená chuť nemusí být vždy nejvhodnější pro daný problém.