Python jest dla mnie stosunkowo nowym językiem. Unit Testing and Dependency Injection to coś, co robię teraz od jakiegoś czasu, więc jestem zaznajomiony z nim z perspektywy C#.Jak wykonać podstawowy zastrzyk zależności w Pythonie (dla kpiarskich/testowych)
Niedawno napisałem ten kawałek kodu Pythona:
import requests # my dependency: http://docs.python-requests.org/en/latest/
class someClass:
def __init__(self):
pass
def __do(self, url, datagram):
return requests.post(self, url, datagram)
I wtedy zdałem sobie sprawę, że właśnie stworzył zakodowane zależność. Bleh.
I rozważał zmianę mojego kodu zrobić „Konstruktor” Dependency Injection:
def __init__(self,requestLib=requests):
self.__request = requestLib
def __do(self, url, datagram):
return self.__request.post(self, url, datagram)
To teraz pozwala mi wstrzyknąć fałszywy/makiety zależność dla dobra Unit Testing, ale nie był pewien, czy to został uznany za Python-ic. Apeluję więc do społeczności Pythona o wskazówki.
Jakie są przykłady Python-ic sposoby wykonywania podstawowych DI (głównie ze względu na pisanie testów jednostkowych, które wykorzystują Mocks/Fakes)?
DODATEK Dla każdego, kto ciekaw odpowiedzi Mock, postanowiłem zadać tutaj pytanie: oddzielny How does @mock.patch know which parameter to use for each mock object?
Należy zauważyć, że '__leading_double_underscore' wywołuje wymazywanie nazw i na ogół należy go unikać. Czy nie byłoby łatwiej [próbować '' wniosków'] (https://docs.python.org/3/library/unittest.mock.html) dla badanego modułu niż wstrzykiwać? – jonrsharpe
Przeczytałem, że _ podkreślenie podwójnego podkreślenia oznaczało metodę jako prywatną. Czy myliłem się? Jeśli tak, jak mam oznaczyć coś jako prywatne? – Pretzel
Czy łatwiej byłoby wyśmiewać prośby o moduł, niż go wstrzykiwać? Nie wiem Nie jestem zaznajomiony ze sposobami robienia rzeczy w Pythonie, dlatego pytam. ;) – Pretzel