Trey Hunner (Polski)

Trey Hunner (Polski)

Piszę dużo testów jednostkowych. Niestety mój kod często wymaga poprawnego testowania. Często używam funkcji patch z biblioteki mock Michaela Foorda (teraz dostępnej w Pythonie 3.4 jako unittest.mock), aby małpa Łatała mój kod.

podczas rozmowy z innymi użytkownikamipatch zdałem sobie sprawę, że każdy wydaje się mieć swój ulubiony sposób korzystania z niego. W tym poście omówię sposoby używania patcha.,

dekorator

patch może być użyty jako dekorator metody:

lub jako dekorator klasy:

używam patcha jako dekoratora, gdy mam funkcję, którą chcę łatać podczas całego testu. Zazwyczaj nie używam patcha jako dekoratora klasy i wyjaśnię, dlaczego poniżej.

przykład dekoratora

Menedżer kontekstu

patch może być używany jako menedżer kontekstu:

wolę używać patcha jako menedżera kontekstu, gdy chcę łatać funkcję tylko dla części testu. Nie używam patcha jako menedżera kontekstu, gdy chcę, aby funkcja była łatana przez cały test.,

przykład Menedżera kontekstowego

ręcznie za pomocą start i stop

patch może być również użyty do ręcznego łatania/odłączania za pomocąstart Istopmetody:

wolę używać patcha za pomocą start/stop, gdy potrzebuję funkcji do załatania dla każdej funkcji w klasie testowej.

jest to prawdopodobnie najczęstszy sposób, w jaki używam patcha w moich testach. Często grupuję testy w klasy testowe, w których każda metoda koncentruje się na testowaniu tej samej funkcji. Dlatego zwykle będę chciał, aby te same funkcje/obiekty były łatane dla każdej metody testowej.,

zauważyłem powyżej, że wolę nie używać dekoratorów klas do rozwiązania tego problemu. Zamiast tego wolę używać atrybutów klasy testowej do przechowywania referencji do załatanych funkcji, zamiast akceptować argumenty patch na każdej metodzie testowej z dekoratorami. To jest bardziej suche.

Uwaga: jedną z głównych zalet form patcha decorator/context manager jest to, że zajmują się one czyszczeniem dla Ciebie. Za każdym razem, gdy wywołujesz start aby skonfigurować obiekt patch, zawsze pamiętaj, aby wywołać stop aby go wyczyścić., W przeciwnym razie będziesz miał małpę załataną funkcję / obiekt dla reszty uruchomionego programu.

przykład start i stop

podsumowanie

łatka może być używana:

  1. jako metoda lub dekorator klas
  2. jako menedżer kontekstu
  3. używając metod start i stop

wolę, aby moje testy były czytelne, suche i łatwe do modyfikacji. Zazwyczaj używam metod start/stop z tego powodu, ale często używam dekoratorów metod łat i czasami używam menedżerów kontekstu łat., Warto znać różne smaki patch, ponieważ twój ulubiony smak może nie zawsze być najbardziej odpowiedni dla danego problemu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *