Dingus este ca un fel de obiect mostră. Principala diferență este că nu configurat așteptărilor înainte de timp. Tu trebuie doar să rulați codul, folosind un Dingus în loc de un alt obiect sau clasă, și se va înregistra ce se întâmplă cu ea. Apoi, odată ce codul a fost exercitată, puteți face afirmații cu privire la ceea ce a făcut la Dingus.
Un nou Dingus este creat din clasa Dingus. Puteți da nume dinguses, care ajută la depanare testele, în special atunci când există mai multe dinguses în joc.
& Nbsp; >>> de la Dingus import Dingus
& Nbsp; >>> d = Dingus ('root')
& Nbsp; >>> d
& Nbsp;
Accesarea orice atribut al unui Dingus va reveni un nou Dingus.
& Nbsp; >>> d.something
& Nbsp;
Există câteva excepții pentru metodele Dingus speciale. Vom vedea ceva într-un pic.
Un Dingus poate fi, de asemenea, numit ca o funcție sau metodă. Ea nu-i pasă cât de multe argumente ai da sau ce aceste argumente sunt. Apelurile către un Dingus va întoarce mereu același obiect, indiferent de argumentele.
& Nbsp; >>> d ()
& Nbsp;
& Nbsp; >>> d ('argumentul ")
& Nbsp;
& Nbsp; >>> d (55)
& Nbsp;
ÎNREGISTRARE ȘI afirmații
În orice moment se poate obține o listă de apeluri care au fost făcute la o Dingus. Fiecare intrare în lista de apeluri conține:
& Nbsp; * numele metodei numit (sau "()" în cazul în care Dingus în sine a fost numit)
& Nbsp; * Argumentele, sau () dacă nici unul
& Nbsp; * Cele argumnets cuvinte cheie, sau {} dacă nici unul
& Nbsp; * Valoarea că a fost returnat apelantului
Aici este o listă a apelurilor le-am făcut la d până acum:
& Nbsp; >>> din pprint pprint import
& Nbsp; >>> pprint (d.calls)
& Nbsp; [('() ", (), {},
& Nbsp; ('() ", (" argumentul ",), {},
& Nbsp; ('() ", (55,), {},
Puteți filtra apelurile după nume, argumente, și argumente cuvinte cheie:
& Nbsp; >>> pprint (d.calls ("()", 55))
& Nbsp; [('() ", (55,), {},
Dacă nu-ți pasă de valoare o anumită argument, puteți utiliza DontCare valoare, atunci când filtrarea:
& Nbsp; >>> de la Dingus import DontCare
& Nbsp; >>> pprint (d.calls ("()", DontCare))
& Nbsp; [('() ", (" argumentul ",), {},
& Nbsp; ('() ", (55,), {},
Dinguses poate face mai mult decât avea doar atribute accesate și de a fi numit. Acestea susțin mulți operatori Python. Scopul este de a permite, și să înregistreze, orice interacțiune:
& Nbsp; >>> d = Dingus ('root')
& Nbsp; >>> (2 ** d.something) ['salut'] () / 100 * "foo"
& Nbsp;
(Sperăm înregistrările Dingus lumea reală nu va arata asa!)
patching
Dingus oferă un manager de context pentru patching obiecte în timpul testelor. De exemplu:
& Nbsp; >>> de la Dingus patch import
& Nbsp; >>> urllib2 import
& Nbsp; >>> cu plasture ('urllib2.urlopen "):
& Nbsp; ... imprimare urllib2.urlopen .__ class__
& Nbsp;
& Nbsp; >>> imprimare urllib2.urlopen .__ class__
& Nbsp;
Puteți utiliza, de asemenea, acest lucru ca pe o decorator cu privire la metodele de test:
& Nbsp; >>>patch ("urllib2.urlopen")
& Nbsp; ... def test_something (auto):
& Nbsp; ... centrări
& Nbsp; ...
MAGIC PERICULOS
Dingus poate, de asemenea, înlocui în mod automat globals un modul de la executarea de teste. Acest lucru vă permite să scrie teste unitare complet izolate. Vezi exemplele / urllib2 / test_urllib2.py de un exemplu. Autorul nu mai recomandă această caracteristică, așa cum se poate încuraja teste foarte fragile. Tu trebuie să se simtă durerea de dependențe batjocoritoare manual; . durerea vă va spune când o clasă colaboreaza cu prea multe altele
Cerințe :
- Python
Comentariile nu a fost găsit