dingus è come una sorta di oggetto fittizio. La differenza principale è che non si imposta aspettative prima del tempo. Basta eseguire il codice, utilizzando un dingus al posto di un altro oggetto o di classe, e sarà registrare ciò che accade ad esso. Poi, una volta che è stato esercitato il codice, è possibile fare affermazioni su ciò che ha fatto ai dingus.
Un nuovo dingus viene creata dalla classe Dingus. Potete dare dinguses nomi, che aiuta con il debug i test, soprattutto quando ci sono più dinguses in gioco.
& Nbsp; >>> da dingus import Dingus
& Nbsp; >>> d = Dingus ('root')
& Nbsp; >>> d
& Nbsp;
Accesso qualsiasi attributo di un dingus tornerà un nuovo dingus.
& Nbsp; >>> d.something
& Nbsp;
Ci sono alcune eccezioni per i metodi Dingus speciali. Vedremo un po 'in un po'.
Un dingus può anche essere chiamato come una funzione o metodo. Non importa quanti argomenti si dà o che tali argomenti. Le chiamate verso un dingus restituirà sempre lo stesso oggetto, indipendentemente dalle argomentazioni.
& Nbsp; >>> d ()
& Nbsp;
& Nbsp; >>> d ('argomento')
& Nbsp;
& Nbsp; >>> d (55)
& Nbsp;
REGISTRAZIONE E AFFERMAZIONI
In qualsiasi momento siamo in grado di ottenere un elenco di chiamate che sono state fatte per un dingus. Ogni voce nella lista delle chiamate contiene:
& Nbsp; * il nome del metodo chiamato (o "()" se il dingus stesso è stato chiamato)
& Nbsp; * Gli argomenti, o () se nessuno
& Nbsp; * I argumnets parole chiave, o {} se nessuno
& Nbsp; * Il valore che è stato restituito al chiamante
Ecco un elenco delle chiamate che abbiamo fatto a d finora:
& Nbsp; >>> da pprint import pprint
& Nbsp; >>> pprint (d.calls)
& Nbsp; [('()', (), {},
& Nbsp; ('()', ('argomento',), {},
& Nbsp; ('()', (55,), {},
È possibile filtrare le chiamate per nome, gli argomenti, e gli argomenti di parole chiave:
& Nbsp; >>> pprint (d.calls ('()', 55))
& Nbsp; [('()', (55,), {},
Se non si cura di valore di un particolare argomento, è possibile utilizzare il valore DontCare quando filtraggio:
& Nbsp; >>> da dingus import DontCare
& Nbsp; >>> pprint (d.calls ('()', DontCare))
& Nbsp; [('()', ('argomento',), {},
& Nbsp; ('()', (55,), {},
Dinguses possono fare di più che avere attributi accessibili e di essere chiamato. Supportano molti operatori Python. L'obiettivo è quello di consentire, e registrare, ogni interazione:
& Nbsp; >>> d = Dingus ('root')
& Nbsp; >>> (2 ** d.something) ['ciao'] () / 100 * 'pippo'
& Nbsp;
(Speriamo che le registrazioni Dingus mondo reale non sarà simile a questo!)
patching
Dingus fornisce un gestore di contesto per l'applicazione di patch oggetti durante i test. Per esempio:
& Nbsp; >>> dal cerotto import dingus
& Nbsp; >>> urllib2 import
& Nbsp; >>> con patch ('urllib2.urlopen'):
& Nbsp; ... print urllib2.urlopen .__ class__
& Nbsp;
& Nbsp; >>> print urllib2.urlopen .__ class__
& Nbsp; <'funzione' tipo>
È inoltre possibile utilizzare questo come decoratore sui vostri metodi di prova:
& Nbsp; >>>patch ('urllib2.urlopen')
& Nbsp; ... def test_something (self):
& Nbsp; ... passaggio
& Nbsp; ...
MAGIC PERICOLOSO
Dingus può anche sostituire automaticamente globali di un modulo durante l'esecuzione di test. Questo permette di scrivere unit test completamente isolati. Vedi gli esempi / urllib2 / test_urllib2.py per un esempio. L'autore non raccomanda questa funzione, in quanto può incoraggiare test molto fragili. Dovreste sentire il dolore delle dipendenze beffardi manualmente; . il dolore vi dirà quando una classe collabora con troppi altri
Requisiti :
- Python
I commenti non trovato