Dingus to coś w rodzaju makiety obiektu. Główną różnicą jest to, że nie ustawić oczekiwania przed czasem. Wystarczy uruchomić swój kod, za pomocą Dingus w miejsce innego obiektu lub klasy, i będzie nagrywać, co dzieje się z nim. Wtedy, gdy Twój kod został wykonany, można zrobić twierdzenia o to, co zrobił dla Dingus.
Nowy Dingus utworzony z klasy Dingus. Możesz podać dinguses nazwy, co pomaga w debugowania testy, szczególnie, gdy istnieje wiele dinguses w grze.
& Nbsp; >>> z Dingus importować Dingus
& Nbsp; >>> d = Dingus ("root")
& Nbsp; >>> d
& Nbsp;
Dostęp dowolny atrybut Dingus powróci nowy Dingus.
& Nbsp; >>> d.something
& Nbsp;
Istnieje kilka wyjątków dla metod specjalne Dingus. Zobaczymy, niektóre w trochę.
Dingus można też nazwać jak funkcji lub metody. Nie obchodzi mnie, jak wiele argumentów podać, czy to, co te argumenty są. Apeluje do Dingus zawsze zwróci ten sam obiekt, niezależnie od argumentów.
& Nbsp; >>> d ()
& Nbsp;
& Nbsp; >>> d (argument ")
& Nbsp;
& Nbsp; >>> d (55)
& Nbsp;
ZAPIS I twierdzenia
W każdej chwili możemy uzyskać listę połączeń, które zostały wprowadzone do Dingus. Każdy wpis na liście połączeń zawiera:
& Nbsp; * Nazwa metody o nazwie (lub "()", jeśli sam Dingus nazywano)
& Nbsp; * Argumenty, lub (), jeżeli żaden
& Nbsp; * The argumnets słów kluczowych, lub {}, jeżeli żaden
& Nbsp; * wartość, która została zwrócona do osoby dzwoniącej
Oto lista połączeń zrobiliśmy do d tej pory:
& Nbsp; >>> z pprint importu pprint
& Nbsp; >>> pprint (d.calls)
& Nbsp; [('(), (), {},
& Nbsp; ("()", ("argumentem",), {},
& Nbsp; ("()", (55), {},
Można filtrować połączeń według nazwy, argumentów i argumentów kluczowych:
& Nbsp; >>> pprint (d.calls ('()', 55))
& Nbsp; [('()', (55), {},
Jeśli nie dbasz o wartości konkretnego argumentu w, można użyć wartości DontCare podczas filtrowania:
& Nbsp; >>> z Dingus importować DontCare
& Nbsp; >>> pprint (d.calls ('()', DontCare))
& Nbsp; [('() ", (" argumentem ",), {},
& Nbsp; ("()", (55), {},
Dinguses może zrobić więcej niż tylko mają atrybuty udostępniony i nazwać. Wspierają one wiele podmiotów Pythona. Celem jest umożliwienie i nagrywać, interakcji:
& Nbsp; >>> d = Dingus ("root")
& Nbsp; >>> (2 ** d.something) ["cześć"] () / 100 * 'foo'
& Nbsp;
(Mam nadzieję, że twoje świata rzeczywistego nagrania Dingus nie będzie wyglądać tak!)
łatanie
Dingus zapewnia menedżera kontekstowe łatanie obiektów w trakcie badań. Na przykład:
& Nbsp; >>> z Dingus importu poprawki
& Nbsp; >>> import urllib2
& Nbsp; >>> z patchem ("urllib2.urlopen"):
& Nbsp; ... druku urllib2.urlopen .__ class__
& Nbsp;
& Nbsp; >>> print urllib2.urlopen .__ class__
& Nbsp;
Możesz również użyć tego jako dekorator na swoich metod badawczych:
& Nbsp; >>>patch ("urllib2.urlopen")
& Nbsp; ... def test_something (self):
& Nbsp; ... przejście
& Nbsp; ...
NIEBEZPIECZNE MAGIC
Dingus może automatycznie zastąpić globalnych modułu, gdy uruchomiony testów. To pozwala na pisanie w pełni samodzielnie testy jednostkowe. Zobacz przykłady / urllib2 / test_urllib2.py na przykład. Autorka nie zaleca tej funkcji, ponieważ może zachęcić testy bardzo kruche. Powinieneś czuć ból ręcznie drwiących zależności; . Ból powie, kiedy klasa współpracuje ze zbyt wielu innych
Wymagania :
- Python
Komentarze nie znaleziono