Dingus er liksom som en mock objekt. Den største forskjellen er at du ikke setter opp forventninger på forhånd. Du bare kjøre koden din, ved hjelp av et Dingus i stedet for et annet objekt eller klasse, og det vil ta opp hva som skjer med det. Deretter, når koden er blitt utøvd, kan du gjøre påstander om hva det gjorde med de Dingus.
En ny Dingus er opprettet fra den Dingus klasse. Du kan gi dinguses navn, som hjelper med debugging testene, spesielt når det er flere dinguses i spill.
& Nbsp; >>> fra Dingus importere Dingus
& Nbsp; >>> d = Dingus ("root")
& Nbsp; >>> d
& Nbsp;
Aksesse egenskap av en Dingus vil returnere en ny Dingus.
& Nbsp; >>> d.something
& Nbsp;
Det finnes noen få unntak for spesielle Dingus metoder. Vi får se noen i en bit.
En Dingus kan også kalles som en funksjon eller metode. Den bryr seg ikke hvor mange argumenter du gi det eller hva disse argumentene er. Samtaler til en Dingus vil alltid returnere samme objekt, uavhengig av argumentene.
& Nbsp; >>> d ()
& Nbsp;
& Nbsp; >>> d ('argument')
& Nbsp;
& Nbsp; >>> d (55)
& Nbsp;
OPPTAK OG PÅSTANDER
Til enhver tid kan vi få en liste over samtaler som er gjort til en Dingus. Hver oppføring i anropslisten inneholder:
& Nbsp; * navnet på metoden kalles (eller "()" dersom Dingus selv ble kalt)
& Nbsp; * Argumentene, eller () hvis ingen
& Nbsp; * De søkeord argumnets, eller {} hvis ingen
& Nbsp; * Verdien som ble returnert til den som ringer
Her er en liste over de samtalene vi har gjort i d så langt:
& Nbsp; >>> fra pprint import pprint
& Nbsp; >>> pprint (d.calls)
& Nbsp; [('()', () {}
& Nbsp; ('()', ('argument',), {}
& Nbsp; ('()', (55,), {}
Du kan filtrere anrop etter navn, argumenter og søkeord argumenter:
& Nbsp; >>> pprint (d.calls ('()', 55))
& Nbsp; [('()', (55,), {}
Hvis du ikke bryr seg om en bestemt argument verdi, kan du bruke verdien DontCare når filtrering:
& Nbsp; >>> fra Dingus importere DontCare
& Nbsp; >>> pprint (d.calls ('()', DontCare))
& Nbsp; [('()', ('argument',), {}
& Nbsp; ('()', (55,), {}
Dinguses kan gjøre mer enn bare å ha attributter hentes ut og bli kalt. De støtter mange Python operatører. Målet er å tillate, og ta opp, noen interaksjon:
& Nbsp; >>> d = Dingus ("root")
& Nbsp; >>> (2 ** d.something) ['Hei'] () / 100 * 'foo'
& Nbsp;
(Forhåpentligvis den virkelige verden Dingus opptak vil ikke se slik ut!)
patching
Dingus gir en kontekst manager for patching gjenstander under testene. For eksempel:
& Nbsp; >>> fra Dingus import patch
& Nbsp; >>> import urllib2
& Nbsp; >>> med patch ('urllib2.urlopen'):
& Nbsp; ... print urllib2.urlopen .__ class__
& Nbsp;
& Nbsp; >>> print urllib2.urlopen .__ class__
& Nbsp;
Du kan også bruke dette som en dekoratør på testmetoder:
& Nbsp; >>>patch ('urllib2.urlopen')
& Nbsp; ... def test_something (egen-):
& Nbsp; ... pass
& Nbsp; ...
FARLIG MAGIC
Dingus kan også automatisk erstatte en modulens globals når du kjører tester. Dette gjør at du kan skrive fullt isolert enhet tester. Se eksempler / urllib2 / test_urllib2.py for et eksempel. Forfatteren ikke lenger anbefaler denne funksjonen, så det kan oppmuntre veldig sprø tester. Du skal føle smerten av manuelt spottet avhengigheter; . smertene vil fortelle deg når en klasse samarbeider med for mange andre
Krav :
- Python
Kommentarer ikke funnet