
benvenuto al discorso sui test unitari
buone pratiche e errori orribili o
come ai miei amici americani piace dire bene
pratiche e possibili errori perché
a loro non piace fare del male agli altri
sentimenti e sono d’accordo sono d’accordo la maggior parte del
cose di cui parleremo del nostro possibile
errori sono solo un singolo specifico
punto di vista, ma proverò a spiegare come
il più possibile perché li penso
le cose sono possibili errori un po ‘
un po ‘di me e ho scritto un libro in
Il 2006 ha definito l’arte del test unitario
uscirà nella seconda edizione
e quando ho iniziato quel libro avevo zero
bambini, ma quando ho finito quel libro ho avuto
due bambini e quando ho finito il
prenotare ci sono voluti tre anni ho capito solo
quanto mi sbagliavo
e come le cose che ho scritto nel libro
sono già sbagliati quindi ho dovuto riscrivere
un po ‘ma per la seconda edizione
in pratica sto andando in realtà sono andato
a Goodreads e II ha segnato il mio libro come
tre stelle perché ne penso un po ‘
è sbagliato quindi spero che la seconda edizione
sistemerò un po ‘di quello in cui sono effettivamente
il processo di scrivere un altro libro
chiamato belle build e ho appena fatto
prenotare le note del team leader del software
pubblicato ma soprattutto se lo hai
tutte le domande o le cose dopo questo discorso
puoi sentirti libero di chiedermelo via
Twitter o semplicemente contattami in qualche modo
dopo il dopo la presentazione e io
voglio dire che tutto ciò che sei
andando a sentire sono basati sul mio attuale
fallimenti quindi ho fallito un bel po ‘ penso
Chad Fowler sarebbe stato orgoglioso e a
molti di quei fallimenti mi hanno insegnato tanto
che oggi nei progetti posso ottenere
i progetti per lavorare e avere unità
il test ha effettivamente successo
riuscire nel nostro debito nel nostro progetto sono
abbastanza nervoso questa è una grande folla
Ero uno scherzo
ora il primo errore è che le persone
credici solo facendolo un’unità
test renderà la vostra vita più facile voi
ascoltalo in tutti quelli che parlano dell’unità
testare che sei in fase di test è sorprendente
unit testing sarà più facile trovare
bug quindi immagina che quando ne hai 4000
i test unitari nel codice sono più facili da fare
trova bene bug che è assolutamente sbagliato
il più delle volte cosa succede quando io
venire a progetti e fare consulenza è
che i test stessi hanno bug
i test passano quando non dovrebbero essere
passando loro falliscono quando non dovrebbero essere
in mancanza e quindi non c’è fiducia nel
prova così come fai ad assicurarti che il tuo
i test non hanno bug che scrivi
prova per i tuoi test come fa il test
per i tuoi test come lo sai
non ha bug quindi scrivere un test per
i test per un test non funzionano che posso
ti dico che ora un modo per risolverlo
sarebbe lo sviluppo basato sui test in
che vediamo fallire il test e poi noi
vederlo passare senza toccare il test
quindi stiamo effettivamente testando questo test
ma la maggior parte dei progetti in realtà non lo è
più facile trovare bug se non si paga vicino
attenzione a cosa diavolo sta succedendo
nel codice e nei test e vedremo
come risolvere quell’altra cosa
tutti dicono che è più facile
mantieni il tuo codice quando lo hai
qualcosa come mille test di unità
quattromila test unitari e ancora
questo non è assolutamente vero perché il
prova se testano molto interno
l’implementazione con cui si finisce
che si refactoring il codice e quindi
improvvisamente hai dei test che si rompono anche
anche se in realtà dovrebbero passare
se il codice funziona ancora e così hai
per andare e iniziare a cambiare i test a
un certo punto inizi a dire che lo sai
ciò che questo non vale la pena il mio tempo
e quindi inizi a rimuovere i test o
in realtà commentandoli o inserendoli
ignorare gli attributi su di loro in modo che non lo è
necessariamente vero e lo direi
la maggior parte dei progetti che falliscono con i test unitari
è a causa della manutenibilità
rilascia uno dei primi progetti che
Ho dovuto cancellare alcuni dei
i nostri test dopo pochi mesi di
codice è più facile capire il tuo codice
quando ne hai mille a quattro
mille test bene so che lo sai
quello non è vero
per la maggior parte dei test che hai visto
la maggior parte delle persone soprattutto quando iniziano
fuori con le prove quello che vedono e che cosa
loro quello che pensano è che il test
il codice non è importante così solo loro
rinunciare a nomi come ah, prova uno o
prova una prova di porta qualunque e poi il
il codice di prova di per sé è solo no , solo
asserire sulla cosa ed essere fatto
con esso
e poi i test finiscono proprio come te
trattati loro che non aiutano in
termini di leggibilità, di cui parleremo
problemi di leggibilità anche oggi, ma
solo quando queste tre cose sono vere
in realtà è più facile sviluppare il tuo
software quando si hanno test unitari e
uno e molti dei motivi per cui farlo
con perché le aziende non adottano unità
il collaudo nell’organizzazione è perché
stanno fallendo con uno di quelli a
meno e poi quello colpisce l’altro
due che creano una catena molto grande
reazione il secondo grande errore è quello
una volta che hai iniziato a fare test di unità tu
non fai nessuna recensione di prova o
recensioni di codice quindi alcune aziende lo fanno
in realtà faccio recensioni di codice ma per la maggior parte
gli sviluppatori che conosco non fanno test
recensioni quindi rivedono il codice ma solo
un po ‘e solo i tempi specifici
ma il punto di una revisione del codice e a
recensione di prova è che tu insegni e tu
conoscere le pratiche in modo da poter avere
una persona che sa davvero come scrivere
buoni test unitari in squadra e così
la persona sta scrivendo lì, è solo
seduto lì a programmare test fantastici ma
allora tutti gli altri intorno a lui sono giusti
creare una pila di letame in giro così quando
vieni e vedi il test che vedi bene
prova e poi proprio sotto di esso un test che
non ha business essere lì e non c’è
pochissima comunicazione sul
qualità dei test quindi la recensione del test è
uno dei migliori modi per effettivamente
istituisci recensioni di codici perché se tu
ci pensano i test sono davvero mini uso
casi del codice che è possibile eseguire
dentro e tu puoi davvero capire
molto molto rapidamente se lo sviluppatore
effettivamente capito il requisito o
a volte solo guardando il
nome dei test che puoi effettivamente
capire che lo sviluppatore ha fatto
capire il requisito che non è necessario
anche bisogno di scavare nel codice di te
non devi leggere 50 righe per dire oh
Ora si sta facendo tutto sbagliato volte
se il nome è abbastanza buono, allora sì
salvato tutto quel tempo e quando si esegue il codice
recensioni e recensioni di test in cui deve essere
persona non è possibile utilizzare uno strumento se si utilizza
se usi github per fare recensioni del
codice e tutto ciò che fai è nei commenti sì
questo è un bene, ma è in nessun posto quasi come
potente come coppia che programma con quello
persona o addirittura addirittura a distanza
desktop o qualcosa di simile in cui tale
la persona può vedere l’ espressione del tuo
faccia dove puoi sentire il tono di
la loro voce perde molte informazioni
se chiedi alla persona qualcosa e loro
esita che è qualcosa che non lo fa
passare attraverso i commenti se continuano
fissando la loro risposta mentre lo dicevano
non passa attraverso quando scrivono il testo
vedi solo il risultato finale così puoi
dire dove ci sono cose che sono
debole la loro conoscenza è debole su di te
può aiutarli a imparare qualcosa o anche
meglio impari qualcosa da loro perché
perchè l’ hai fatto ?
che forse non avresti scritto
il commento su github
perché era solo una piccola cosa e
non ha niente a che fare con la corrente
revisione del codice ma l’hai appena visto e lui
detto e avresti voluto dire hey
Cos’era quella piccola cosa hai appena fatto
o che tu abbia scritto lì ma non è così
su quello che stai facendo e poi tu
non scriverlo nel commento e forse
è troppo grande per iniziare a scrivere il testo
su di esso nei commenti e così un intero
opportunità per imparare qualcosa di nuovo
si perde una nuova tecnica se la tua squadra è
imparare e non fare recensioni sul codice e
recensioni di prova lo consiglio vivamente
inizi a farlo se decidi di farlo
lo fa su tutto il codice tutto no
finestre rotte nessuna linea di codice dovrebbe andare
non revisionato anche se è una singola riga di
XML da qualche parte dovrebbe essere recensito no
finestre rotte perché se ti fai alzare
il bar e poi domani qualcuno ha detto oh
è solo un metodo in realtà non lo è
bisogno di farsi rivedere ma se lo sei
cercando di insegnare alla tua squadra come fare unità
analisi
questo è uno dei modi migliori ora quando il
cosa di cui voglio parlare devono
fai cosa con quei tre pilastri del bene
unit test che sono affidabili
sono mantenibili e lo sono
leggibile se non ti fidi dei tuoi test
e li vedi fallire o passare potresti
ancora voglia di entrare nel debug del tuo codice se
passano o se falliscono potresti
Dì ancora no, va bene
e uno dei punti di fiducia il vostro
il test è che dovresti essere preoccupato quando
falliscono così qualcuno ha detto oh questo è RTF
ma basta farli
RTM giusto test RTM ma se lo fai
Velocemente sarà RTFM e poi
è tutto fantastico e ho pensato forse
Dovrei aggiungere il più velocemente possibile dopo
un grande errore è che le persone usano finta
oggetti e tronconi per tutto quando
invece dovrebbero effettivamente usare
loro molto molto poco quindi andrei lontano
e diciamo che forse il 5% del tuo codice è attivo
il tuo test dovrebbe avere qualsiasi tipo di simulazione
oggetto e quando dico mock object I
non significa uno stub e la differenza
tra un oggetto finto nello stub
che un oggetto finto è qualcosa che
verificherà che verificherai contro a
la fine del test e uno stub è giusto
qualcosa che ti rende felice
potrebbe avere più stub nel test
ma potresti avere solo un singolo
simulare l’oggetto perché verifica un singolo
risultato finale lasciatemi essere un po ‘ più chiaro
a riguardo quando parliamo di unità
prova quando dico la parola unità in un’unità
prova cosa intendo è una unità di lavoro I
non intendo un metodo, non intendo una classe
o qualcosa di simile quello che voglio dire è
che potrebbero esserci più metodi o
anche più classi in esecuzione in memoria
e vengono richiamati da alcune API pubbliche
da qualche parte ma poi il test sembra a
API pubblica e poi succedono molte cose
in memoria non toccano il file
sistema o un database o qualcosa di simile
quello e poi alla fine c’è o
uno dei tre possibili risultati finali
potrebbe tornare un metodo giusto
questo restituisce qualcosa che potresti avere a
metodo void e quindi il metodo void ha
fare qualcosa
anche i metodi di annullamento della scrittura non restituiscono
valori ma perché li chiameresti loro
deve fare qualcosa e questo è
di solito per cambiare lo stato del
sistema e cambiamento di stato evidente in
il sistema e il terzo tipo di fine
il risultato è quando non cambiano il
stato e non restituiscono il loro valore
perché dovresti avere questi metodi quando tu
inoltrare le chiamate a terzi come a
una specie di logger o web API e solo
in quel terzo tipo di risultato finale fanno finta
oggetti in realtà alcun senso che è
l’unica volta in cui hai un
fire-and-forget
in un contesto esterno quando ci provi
testare su terzi senza una simulazione
oggetto c’è molto poco da controllare
che chiami Twitter nel modo giusto ecc
quindi se provi ad affermare contro di esso
sarebbe davvero molto difficile quindi
invece quello che faremo è che lo faremo
avrà un oggetto finto che assomiglia
il Twitter non è l’ API di Twitter ma a
facciata che lo astrae e se
è stato chiamato tutto è buono
questa è l’unica volta in cui oggetti finti
in realtà ha senso ma dal momento che
inizio di oggetti mock nel vostro in
testare persone hanno abusato e
usandoli molto di più solo perché loro
poteva e che ha poi creato un sacco di
test che sono molto fragili molto difficili da
mantenere ciò si spezzerebbe su ogni
piccolo cambiamento ad ogni interno
implementazione nel codice così il 5% è possibile
essere la quantità di chiamate che devi
esternamente le API sono nel tuo codice
è così che molti oggetti finti dovresti
ma ricordati che questo è solo un
scenario di fuoco e dimenticanza se si ottiene
licenziato qualcosa e ottieni qualcosa
indietro che non significa sempre che sia un
finto oggetto è ancora un mozzicone
dipende dal flusso di informazioni così
solo se il risultato finale è assoluto
chiamare una terza parte ha senso
usa un oggetto finto ora un altro molto molto
errore comune che vedo è che le persone
dimmi questo finto che tutto sia
la parola deride per tutti tranne che lì
dovrebbe essere una differenziazione ora se tu
leggi i modelli di test del libro xqe che hai
visto tutti questi test di cose testabili
vasca dei segni falsi e tutte queste cose significano
qualcosa per tutte queste cose
assomigliare ad altri somethings e quello è a
cosa molto molto complicata soprattutto
per qualcuno che è relativamente nuovo a questo
campo per capire e quello che trovo è
che se uso una terminologia più semplice
e non uso tutte queste cose che ho appena fatto
tre cose che parlo
Ho falsi falsi è tutto ciò
sembra qualcos’altro e poi
se se asserisco contro di esso, allora lo è
un finto se non asserisco contro di esso è
uno stub e questo è l’unico
differenziazione se prendi questa rozza
la grana del grano la differenziazione
puoi iniziare a parlare del
differenza tra mock e stub e
non chiamare tutto come una finta invece di
dicendo che sto per deridere questo sto andando
per contrassegnare quello che di solito si intende
Ho intenzione di mozzare questo sto andando a mozzare
che l’unica volta che dovresti dire che sono
andando a deridere questo è quando sei
aspettandomi che questo sia chiamato ma
anche i quadri usano la parola deridere troppo
molto e finta è molto molto sovraccarico
e di nuovo la differenziazione sei tu
voglio solo prendere in giro un segno per test come
stai mettendo alla prova una cosa che potresti avere
più stub quindi è necessario conoscere il
differenza terzo stato basato su uno dei
le cose belle che succedono sono quelle se tu
non usare oggetti finti che stai ricevendo
in un territorio di prova molto semplice
a volte si tratta solo di invocare il metodo e
quindi controlla che qualche stato lo abbia
cambiato ma puoi anche ottenerlo un po ‘
la preghiera in alcuni problemi, per esempio
potresti controllare che sia interno
stato è stato cambiato quindi immagina
linea bianca che porta il confine del tuo
API e test che invoca il pubblico
L’API dovrebbe essere valida solo su un’API
allo stesso livello nessun livello più profondo
perché se lo fai sei destinato ad arrivare
cose strane per esempio guarda questo
test aggiunge un utente in memoria crea a
utente e poi controlla che ci sia un
campo interno da qualche parte che ha il
utente in memoria ora questo test lo farà
culo ma non significa che il codice
funziona perché stai controllando l’interno
l’implementazione che sta per finire è
quello forse gli altri metodi quello
devono usare quell’utente lo stanno usando male
o stanno usando un campo diverso così
anche se l’implementazione privata funziona
non significa che l’unità di lavoro
funziona effettivamente allo stesso livello di
l’ API pubblica è meglio
implementazione dello stesso test se tu
potrebbe farlo creare un add
un utente e quindi verificare che è possibile accedere
in con il nuovo stato utente così evidente
la differenza in questo caso è che il
comportamento dell’oggetto o del sistema
sotto test è diverso da quello che era
prima di aver cambiato lo stato a
il metodo restituisce un valore diverso o a
metodo diverso restituisce un diverso
valore ma è ancora allo stesso livello
dell’API non sta controllando l’interno
implementazioni una delle più grandi
problemi che vedo e di cui ho parlato
questo è quello che le persone non si fidano
i loro test e uno dei più grandi
le ragioni per questo è che le persone mescolano unità
e test di integrazione insieme nel
stessa suite e li gestiscono tutti
insieme e poi i test di integrazione sono
di solito molto più abbinato alla corrente
implementazione della macchina locale per
esempio hanno bisogno di un qualche tipo di
configurazione e cosa vogliamo noi
voglio determinare che in questo caso unità
i test sono test leggeri che sono
ripetibile puoi facilmente rieseguirli
senza riconfigurazione sono veloci
perché non toccano alcun tipo di I / O
si spera che siano coerenti che siano
sempre gli stessi test quindi se lo sono
utilizzando data / ora l’ora del giorno corrente in
il test ogni volta che li corri loro
in realtà un test diverso potrebbero
restituire risultati diversi se lo sono
usando numeri casuali ogni volta che corri
loro sono un test diverso e il
il punto di questi test leggeri non lo è
per assicurarsi che tutto dappertutto
funziona ma per essere sicuro di avere un
la linea di base del software di lavoro che puoi
quindi riempire tutto il resto con l’integrazione
test
e lì dovrebbero essere facili da scrivere
e leggere di solito hanno bisogno di test di integrazione
molta configurazione e vedi molto
di magia come se venisse da me
non ho idea di come lo sapevi
la cosa in realtà esiste da qualche parte così a
realizzare tutte queste cose che servono i test
avere il pieno controllo delle loro
dipendenze significa che se ne hai
una specie di terza parte che crei
o uno stub o un oggetto finto e loro
dovrebbe davvero essere in memoria in modo che loro
può essere pienamente coerente. Sto andando
darti un esempio da un open source
progetto chiamato open layer quando ho ottenuto il
ultima versione di open layer e io solo
ha eseguito tutti i test questo è quello che è successo
puoi vedere molto verde ma poi tu
vedere alcuni rossi e il problema con questo
è che ti aspetteresti un progetto che ha
verifica che tutti i test siano
passando così immagina un programmatore nel tuo
squadra che sta ottenendo l’ ultima versione
del tuo codice sorgente poi eseguono tutto
i test e alcuni di loro stanno fallendo
Sono sicuro che non è mai successo a nessuno
uno di voi in questa stanza ma ce l’ha
mi è successo in alcune squadre e poi
qual è la cosa peggiore che puoi sentire
qualcuno dice quando chiedono perché quelli
i test stanno fallendo non ti preoccupare
va bene è solo un problema di configurazione
va bene e poi diventano quei test rossi
solo un fastidio invece di qualcosa
preoccuparsi di
e il grosso problema qui è che tu
non so quali test sono l’integrazione
test e quali test sono unit test o
test leggeri se avessimo una separazione
in un altro progetto che potremmo avere
facilmente detto che abbiamo un verde sicuro
Test di zona che dovrebbe sempre essere verde no
importa cosa e poi ne abbiamo alcuni
fiducia e se uno di loro fallisce noi
dovrebbe essere effettivamente preoccupato ma perché
sono misti e tendiamo a smettere di farlo
qualunque configurazione abbiamo bisogno di solo
far passare quelle cose perché abbiamo
cose migliori da fare con il nostro tempo così da
separando almeno diamo una sorta di
fiducia in una sorta di sicurezza e
più fiducia almeno in alcuni dei test
come un
il gruppo jQuery ha lo stesso problema quando
ottieni l’ultima versione di jQuery e
si esegue tutti i test di default si ottiene
questo bene in realtà si ottiene questo, ma se
lo fai correre ancora sette minuti prima
il modo in cui lo esegui di nuovo lo ottieni
ok, quindi era 137 ora è 136 fallito
cosa diavolo significa quello che sono io?
dovrebbe pensare significa questo
jQuery ha bug probabilmente non è quello che
significa che se inizi a scavare
intorno e inizia a guardare tutto il resto
i test che stanno fallendo stai andando
iniziare a dire cose come questa
oh hai bisogno di PHP e del server
in esecuzione localmente per essere in grado di eseguire il
I test relativi all’Ajax hanno senso, ma allora
questi non sono test unitari ma tutti quelli
i test che richiedono PHP sono nell’unità
cartella dei test e non c’è modo
per eseguire facilmente solo il test unitario di
jQuery quindi ho avuto così ho dovuto iniziare
guardandosi intorno e ovviamente pensavo
ha senso che tu debba farlo
avere PHP in esecuzione e ovviamente lo sai
Google ti dirà che hai bisogno di PHP
installato ecc. per far funzionare jQuery
non appena installato hai bisogno del server
in esecuzione con PHP e questi file sono
servito e ancora tu hai la fiducia
problema se volevo fare lo sviluppo
questo è un progetto open source quindi sono
comodo con il fatto che devo
impostare tutto e assicurarsi che
tutto funziona prima di fare il
prima cosa ma se questa fosse una squadra se
questo era un progetto in una squadra in un
società non mi aspetterei che lì
essere quel tipo di separazione di
non-separazione
Mi aspetterei almeno avere una cassaforte
zona verde che dice che questi sono tutti i
test unitari che dovrebbero passare n
importa che cosa importa se vogliamo
fidati dei nostri test dobbiamo rimuovere la logica
dai nostri test quindi questo è un esempio di
ancora una volta questi sono test di jQuery
questo è un test che genera effettivamente un
molto molto
stringa e ha un ciclo e ovviamente
quello sembra molto molto innocente ma il
il punto è che questa è una finestra rotta
qualcun altro guarda questo e dice okay
va bene scrivere loop a destra e poi
e poi in seguito qual è il punto di logica
è che se i tuoi test hanno dei bug è così
molto difficile trovare qualsiasi pezzo di logica
i tuoi test sono destinati a un certo punto
forse avere un bug in questo modo io
voglio evitare che il test dovrebbe essere solo
il test dell’unità dovrebbe essere molto molto chiaro
dichiarazioni semplici posso salvare tutto il
cicli e i numeri casuali e tutti
quella roba e li ho messi in uno speciale
cartella chiamata test di integrazione c’è
tutte le cose che richiedono una logica
e o qualsiasi altra cosa dal modo in cui non c’è
qualcos’altro di interessante qui è quello
se guardi la parte superiore del test qui
c’è un numero e questo è il numero
di un bug che hanno risolto perché lì
era un problema e quando ho quei bug
risolve specialmente quando è difficile
ricreare o richiedono speciali speciali
attenzione cosa mi piace fare è che io
separare quei test che ricreano bug
in un’altra cartella speciale chiamata bug
fissaggio o qualcosa del genere e, in
quella cartella speciale puoi avere tutto
questi animali pazzi perché ovviamente
questo è l’unico modo o quello è uno dei
solo modi in cui puoi ricreare questo bug tu
devi avere una stringa davvero lunga
potrebbe trattarlo da un file che potresti
generarlo si potrebbe avere in memoria
hai ancora bisogno di quella lunga stringa ed è così
farebbe comunque male alla leggibilità
o la manutenibilità o la fiducia di
i test quindi li ho messi in uno speciale
cartella e poi tutti quei test che sei
permesso in un modo per avere questi rotto
Windows perché è diverso
edificio con finestre diverse ma il
zona verde sicura e test leggero
non dovrebbe avere finestre rotte
ecco un altro esempio da un altro
prova questo è il controllo su
percentuali di lavoro con CSS e
diversi browser hanno persino messo a
il commento deve verificare questo come il
il risultato dipende dal supporto che il
il browser ha
per le percentuali delle dimensioni dei caratteri, se necessario
mettere il commento nella sua prima di tutto
probabilmente dovrebbe essere un test diverso con
un buon nome ma secondo che se potesse
hanno anche un diritto bug sembra davvero
Davvero innocente, ma anche l’innocenza
roba sono sicuro che tu ne abbia avuto più di
tre giorni di esperienza come sviluppatore
sapere che anche tre righe di codice che
sembra molto innocente potrebbe avere molto uh
bug ninna –scent una delle cose che
Io che ho visto in molte strutture in
i test dei framework open source sono così
c’è molta affermazione forzata
conta così tanti quadri
specialmente qunit in questo caso loro
sostenere l’ idea che tu possa dire come
molti affermano che avrete nel
seguenti test e poi se alcuni dei
afferma non eseguire i test saranno
rompi e dì no no me l’ hai detto
sarebbero cinque asserzioni ma c’erano
più o meno e per me no
penso che sia un grosso problema ma lo è
sicuramente una specie di manutenibilità
problema perché io non sai che è è
non è un grosso problema ma quando ho chiesto
John Resig perché dice che è un
po ‘di lavoro extra, ma è bene
sapere se la suite smette mai di correre
qualche strana ragione penso che non sia un
cattiva ragione per averlo specialmente se
ancora una volta gestisci un open source
progetto e non sai tutto il
persone che contribuiscono al tuo codice e
non ti fidi davvero di quello che faranno
ricorda di scrivere test in un modo simile
non rompere e forse un modo asincrono lo farà
non correre o qualcosa così forse in quello
in qualche modo ha senso
attuare questo ma serve ma ma poi tu
guarda i test che hanno 78 78 assert
atteso così dicendo okay questo sta diventando
un po ‘ fuori mano perché puoi
immagina di aggiungere un altro a quello
prova e poi dover andare al
iniziare e quindi aggiungere e sostituirlo
a 79 è come lavorare molto molto
alta società burocratica no questo è il
numero di asserzioni attese e, naturalmente
si sa che
le persone hanno iniziato a gestirlo
appena contato quanti affermazioni pensano
avevano e quando si aspettano hanno detto no no
hai un numero diverso loro giusto
cambiato a quel numero al
all’inizio e hanno continuato a continuare ad aggiungere
più uno e due e tre um allora poi
hai 119 questo è interessante questo è
solo l’inizio del test, ovviamente
e inizi a vederlo ora stiamo vedendo
un modello diverso per quale motivo noi
avere 119 affermazioni in questo test è perché
questo non è proprio un test, questo è un test
suite camuffata come metodo di prova e in
che metodo di prova stiamo testando tutti
le possibilità relative al punto jQuery
quando e poi quello che succede è il
gli sviluppatori sono quindi incoraggiati perché
vedono gli altri test per poi metterli nuovi
test in fondo a questo metodo e
poi cambiano l’aspettativa, quindi è così
davvero una suite di test camuffata e poi
ogni assert è davvero un test diverso
e poi ovviamente non puoi davvero
dargli un buon nome basta a
dare messaggi di errore veramente buoni lo faremo
parlare dei messaggi di errore in a
secondo poi si deve questo diritto questo
povero ragazzo voleva solo scrivere a
il semplice test deve ancora dire aspettarsi uno
ora in termini di leggibilità uno dei
cose che sono difficili da leggere quando ero
guardando le prove di jQuery che ero
guardando questo test e ho detto bene
ti aspetti la parola blog da questo
cosa a e2 di apparire in questo saggio P
cosa ecc ma dove dove lo fa
esiste realmente e quindi ho dovuto iniziare
pensare da dove viene questo e
da nessuna parte menziona dove il testo
è e, naturalmente, una volta che ti rendi conto che si
capire che il test Runner the
punto indice HTML test Runner in realtà
contiene tutti i dati di test e c’è
una condivisione è fondamentalmente condivisa
risorsa c’è una pagina HTML dove tutto
i test stanno funzionando e poi tu
devo andare e guardi questa pagina e
vedi, oh, va bene, ma tu
rendersi conto che tutti gli sviluppatori che
scrivere test per questo ciascuno di
loro
probabilmente aggiunge una linea a questa pagina
speriamo che non facciano quello che vogliono
fare è che avrebbero manipolare questo in
anche la memoria quindi immagina di avere
seimila test che manipolano tutti
stesso pezzo di HTML e tutti devono
coincidono tra loro hanno tutti
per assicurarsi che gli altri test abbiano
lo stesso stato ecc e questo è un po ‘
potrebbe anche essere un problema di manutenibilità
ecco un altro esempio da qualche parte
lì all’inizio di un tempo molto lungo
suite di test c’è una dichiarazione di a
variabile e poi da qualche parte in basso
c’è l’uso di quella variabile molto
molto fastidioso per cercare di leggere e
capisci quel test e poi cosa
succede che guardano ancora gli sviluppatori
l’originale finestre rotte e dire
okay tutte le variabili sono definite a
il massimo perché questo è iniziato all’inizio
come metodo di prova ma poi di più e
più cose sono state aggiunte così qualcuno a
un punto ha detto oh sai di cosa si tratta
sono cento linee di codice ma tutte le
I VAR sono in un posto dove non vado
fare una cosa diversa ovviamente giusto così
Metterò la var nello stesso posto
e la psicologia umana è allo stesso modo
giusti conosci l’esperimento che hai messo
tutti in un ascensore per le altre persone
ci sono attori in te e tu ne ottieni uno
persona per l’ascensore e tutti
si gira per non guardare la porta e
poi la persona che è l’aspetto innocente
a tutti se si gira dall’altra parte come
bene perché non sa che fa cosa
tutti gli altri fanno questo è il tipo di
punto è che qui invece di puntare
la fossa del successo che stiamo dando alla gente a
modello di come rendere il test di più
e più o meno e meno mantenibili
commenti Non sto parlando di
commenti regolari di cui sto parlando
commentando test cosa succede quando
hai queste cose nelle tue prove
può immaginare lo sviluppatore nessuno lo farà
mai cancellare queste cose in cinque
anni questi commenti esisteranno e il
la ragione non sa perché fossero
commentato fuori nessuno sa se
sarà un giorno commentato in
nessuno sa quale deve essere il punto
importante e quindi resterà lì
per sempre non fare nulla ma solo
facendo chiedere a tutti inutili
domande così dico anche alle persone quando lo faccio
insegnare unit testing è che immaginare che
la persona che leggerà il tuo
il codice è un serial killer che sa dove
tu vivi, non vuoi che inizino
facendo domande inutili ma in questo
caso che il serial killer sta per prendere
e chiede a X di venire a casa tua e iniziare
chiedendo hey di cosa si tratta?
davvero, per quanto riguarda la denominazione, è il nome
una delle cose che penso le persone
mi manca davvero di più in questo caso noi
avere un test per il testo con un indefinito
e poi alla fine notano che loro
c’è un messaggio l’ultimo parametro di
l’uguale è cosa mettere fuori cosa
stampare se il test fallisce e notare
il testo del messaggio non definito è concatenabile
ovviamente questa è una soluzione per il bug ma
allora la mia domanda è concatenabile
l’errore o è concatenabile alla correzione che
uno di loro è l’importante dovrebbe
è modificabile se non va bene così
il modo in cui mi piace chiamare mia prova è che io
avere tre pezzi di informazione
da qualche parte in modo che il lettore possa
capisco cosa sta succedendo e trovo
anche se ne tralascia uno di quelli
cose che il lettore sta per avere
domande e poi devono leggere il
codice del tuo test e in questo caso lo è
l’unità di lavoro o il punto di ingresso a
l’ unità di lavoro e quindi abbiamo
scenario che è in quali condizioni
stiamo testando in questo caso lo scenario
è indefinito e quindi previsto
comportamento e dovrebbe essere nel nome così
in questo caso sarebbe testo con
non definito e quindi scriverei
può essere incatenato o non dovrebbe essere incatenato
uno dei due ma vorrei scriverlo al
nome del test non al messaggio di
gli uguali o gli asseriti e in effetti io
sosterrebbe che non dovresti essere
scrittura
qualsiasi messaggio per come l’ultimo parametro
dell’asserzione perché se il nome del test
è abbastanza buono che non dovresti e
quando vedi solo il nome del test
non vedere tutti quei messaggi quando il
test fallito, ne vedi solo alcuni
e poi vedi la traccia delle statistiche ma il test
il nome è la prima cosa che vedi quando tu
avere un errore e se il nome del test è
abbastanza buono che potresti non aver bisogno di vedere
il codice del test prima di andare
il codice di produzione e iniziare a risolvere
qui è un esempio che chiamo il
prova di doom luci okay okay questo è
il test di sventura proprio lì e quando io
guardato questo test all’inizio
quello che ho visto è questo prima di tutto 78 noi
ne ho parlato ma poi ricordalo
è un test molto molto lungo ad un certo punto
inizi a capire che questo test
è una grande suite di test e poi a
qualche punto in cui inizi a vederti
inizia a vedere tutte queste cose in questo lungo
prova e inizi a dire okay che inizi
iniziare a leggerlo prima e poi
il tempo è sprecato, poi tu vai tutto io
capire questo è un test separato e
stanno facendo un tentativo di cattura perché se
non tutto il codice qui sotto si fermerà
il lavoro non eseguirà mai luci per favore
okay, quindi abbiamo più test in a
test singolo e questo è il massimo
readability incubo e il
manutenibilità incubo e un modo per
risolvere il problema avendo una specie di io
non conosco test separati per tutto
fai un test, penso che sia importante
cosa che possiamo fare ma che conduce anche
a queste cose all’inizio quando Q
l’unità era appena agli inizi
abusarne ed erano chiamando lui unità
ripristina all’inizio e al centro
e poi dopo ogni cosa che
deve essere ripristinato per esempio lo stato
ma questo è davvero solo un anti-modello
ogni volta che vedi questo, qual è il codice
ti sta davvero dicendo che vuoi davvero
diversi test da estrarre da
qui dal modo in cui noti che c’è un
come un uguale dentro e uguale che è
devo essere divertente per il debug
okay diamo un’occhiata al backbone ora backbone
sta usando anche le stesse idee
ma qui ci sono numeri magici che cosa
sono i numeri magici bene non è uno
due e tre ma che diavolo è –
cinque
ricorda il serial killer che guardano
questo e dici – cinque che sembra
interessante perché non segue
il modello giusto e tra l’altro al
in alto abbiamo sei mazzi previsti
quantità di affermazioni di nuovo ma qui il nostro
il cervello è progettato per vedere i modelli 1 2 3
5 – 5 che diavolo se fosse 4 potrei
Capisco che era – 4 Potrei avere
capito ma perché 5 perché hanno saltato 1
questo è un mistero che ancora non ho
risolto, ma solo tempo da perdere
il lettore così in termini di nominare facciamo
guarda il manubrio in questo caso
manubri sta usando gelsomino e in questo
caso Jasmine ti permette di avere nidificato
blocchi di cose molto simili alle nostre specifiche
Ruby ecc. Ma questo è un esempio di come
puoi avere la struttura ma non avere
uno stile adatto per la struttura, quindi se
guardiamo qui i nomi dei test
abbiamo descritto i blocchi e poi esso
array array okay e poi cosa dovrebbe
capita è nei messaggi qui matrici
ignora il contenuto quando array vuoti
scorrere il contenuto quando non è vuoto
beh, questo è il modo sbagliato di usare il
struttura perché ora la persona deve
leggi il tuo codice di prova per capire cosa c’è
suppone che sia in corso, se si desidera che il
test per iniziare a leggere come
documentazione possiamo guardare i test
in un modo diverso ecco come vorrei
strutturare le stesse prove descritte
i blocchi descritti sono descritti in seguito
avresti una descrizione nidificata dentro
questo è non vuoto e poi un esso
dentro che ti dice qual è il
previsto
Itera Salvatore sui contenuti e
quindi solo i blocchi descrittivi più il
Otto ti danno tutto ciò di cui hai bisogno
sapere senza guardare il codice di
il test è lo stesso con quello è vuoto
ignora il contenuto con indice usa il
indice variabile e tutto quello che ho fatto è stato
basti prendere i messaggi di errore e
da qui e poi in basso che il
il file e basta usarli in diversi
posti e questo mi ha dato molto più facile
modo per capire cosa sta succedendo
problema con knockout in knockout voi
hanno descritto dipendenze vincolanti
e poi guarda se il gestore di binding
dipende da inosservabile invoca il pulito
gestore desidera e il gestore dell’aggiornamento
ogni volta che un nuovo valore è ecc ecc ma è
il se questo mi infastidisce di tanto in tanto
questi sono quadri meravigliosi ma penso
il test potrebbe essere più leggibile quando si
avere il se questo è fondamentalmente il
lo scenario giusto hai la cosa che
tu chiami l’unità di lavoro quindi noi
avere il se qual è lo scenario e
quindi contiene anche l’attesa
comportamento quindi sta combinando questi due
pezzi di informazione, ma poi di nuovo
forse questo sarebbe un modo migliore
descrivere la dipendenza di legame descrivere
quando il gestore dipende da osservabile un nuovo
valore disponibile invoca l’init
gestore ha anche senso in inglese
puoi effettivamente leggerlo come una frase
e penso che gli autori intendessero fare
questo, ma non penso che lo sapessero
sulla possibile struttura che tu
può avere e il nidificazione che si potrebbe
fare per renderlo ancora più chiaro ora lì
è un altro problema comune che è quando
hai set up e tu se lo hai mai fatto
set up usati questo è Batman J s in
Batman è uno dei file sembra
questo c’è che stanno usando
CoffeeScript per alcuni dei test quindi
l’ installazione sembra che abbiano un
spia in questo caso la spia è una finta
oggetto e da qualche parte lungo il file loro
inizia a usarlo
il problema è che la spia ha creato il
il metodo di installazione è usato solo in alcuni dei
test
Va bene così stiamo controllando che siamo
in pratica lo si usa come oggetto fittizio in
tutti questi posti, stiamo affermando
contro di esso
ma ci sono un paio di test che
non usarlo così diventa il metodo di prova
meno leggibile perché quando guardi
si inizia a dire oh tutte queste cose
importa, c’è qualcosa , tutto
le prove o meno e poi devi
iniziare a dissezionare nuovamente il codice, quindi se
hai mai voluto iniziare a refactoring questi
serie di metodi sarà molto
difficile perché non sai quale
dipendenze che i test dipendono da questo
se devi usare un metodo di configurazione make
Assicurarsi che solo mettere le cose in esso che
si applica a tutte le prove del
file ma se è solo per alcuni dei
test nel file mi basta usare un
metodo di factoring direttamente nelle prove
in realtà non mi piace usare l’installazione
metodi a tutti vorrei solo mettere il
metodo di fabbrica la maggior parte del tempo e
creo la spia per ogni test che trovo
è più leggibile e quindi il lettore
del test non deve cercare
più posti per capire cosa c’è
andando avanti e mentre ci siamo , sono io
non pensare che sia una grande idea testare
più cose nella stessa prova, penso
che rende il nome del test molto molto
generico quindi forse in jQuery è il
modello che si è evoluto ma io no
pensa che questo sia un buon modello per l’utilizzo
ogni altro quadro penso anch’io
che se tu sei se tu se hai un tale
breve test ma stai testando guarda
il nome che reindirizza utilizzando il reindirizzamento in
un’azione impedisce il rendering implicito
non sono sicuro di cosa impedisca il rendering implicito
significa, ma se guardiamo alle affermazioni che abbiamo
Dì che batte batte l’ app attuale
la lunghezza delle sottoview è zero
forse è quello che impedisce in realtà
significa, ma poi c’è che sto facendo
sicuro che il reindirizzamento di Navigator fosse
chiamato
ora domande interessanti perché me ne importa
che è stato chiamato è solo un
implementazione interna possibile e
quindi non ho bisogno di affermare che io
solo bisogno di affermare sul risultato finale
che è questa lunghezza è zero perché
allora se non ho bisogno di questa linea allora
domani posso rimuovere tutti questi
finché il risultato finale è ancora zero
il mio test non si romperà, ma se questo è
importante se davvero questo metodo che ha
due risultati finali che è possibile a
il metodo può avere più risultati finali ma
ogni risultato finale dovrebbe essere testato
separatamente e ho un buon nome allora io
avrebbe un test diverso che dice
quando lo chiami
per esempio, chiama reindirizzamento del navigatore
ma lo separerei perché in questo
caso se uno di loro fallisce non ne sono sicuro
se in realtà è un problema o no e
a volte specialmente nell’interessante
la gente del mondo inizia su finta
oggetti solo perché possono ma
non significa che dovrebbero e quando noi
guarda tutte queste cose insieme
scoprire che abbiamo quei tre pilastri di
buoni test unitari devono essere leggibili
devono essere mantenibili hanno
essere degno di fiducia se non ti fidi
i tuoi test non ti disturberanno
leggendoli se non lo fai se non puoi
leggi i tuoi test sarà molto
difficile da mantenere e se non puoi
mantieni i tuoi test non andrai mai
per farli entrare in qualsiasi tipo di a
Stati affidabili quando iniziano
in mancanza ringrazio molto e se c’è
ci sono domande che abbiamo qualche minuto
così quando sarà la seconda edizione
ho rilasciato alcune domande su mia madre
e io alcune persone hanno capito lo scherzo
il regolatore non ha un futuro nessuno
sa cosa sia il regolatore tranne me
quel tizio va bene, secondo la seconda
sono stati rilasciati questo mese dovrebbe essere
rilasciato questo mese tu lo dici solo
la terza parte dovrebbe essere contrassegnata su cosa
durante il test contro il tuo repository I
spesso trovo che voglio controllare che il mio
il repository è stato chiamato in un modo specifico
Capisco perfettamente se hai un
repository e i test devono essere utilizzati
una sorta di database quindi direi
non fare test unitari su di esso non lo farei mai
creare un oggetto fittizio di un database e
Dimostrare che alcune query sequel erano
effettivamente chiamato e la ragione è
perché il repository contiene anche a
pezzo della logica che vorresti
prova per esempio la struttura il
lo schema è un esempio di ciò
logica e quindi se hai qualche tipo di
repository userei solo integrazione
test per testare il livello dati contro
quel repository e lo metterei dentro
altrimenti una cartella separata
essa non avrebbe senso il test sarebbe
molto molto fragile e ancora non lo sarebbe
Dimostrare che qualsiasi cosa ha funzionato
avere la query perfetta che passa nel tuo
prova ma se hai ottenuto lo schema sbagliato
il tuo test la tua applicazione sarà in realtà
non funziona
integrazione tra test di separazione e unità
test usi categorie di test o
se dovesse essere un progetto separato, non lo farò
in particolare utilizzo le categorie di test che trovo
che la separazione fisica è una migliore
pozzo di successo che ho visto usare
categorie ma mi piace il fisico
la separazione mi dà una che mi dà un
secchio fisico da guardare quando sono
seduto con qualcuno e stiamo accoppiando
insieme abbiamo due progetti e poi
Dico bene quale progetto riscrivere questo
testare cosa succede con le categorie
che si finisce per decidere se vi ricordate
in quale categoria questo dovrebbe essere davvero
e a volte il punto è questo
è così importante che lo preferirei
essere una cosa fisica e spostare le cose
ma ho visto persone che usano con successo
categorie quindi direi che è più di un
preferenza personale di uno specifico
problema con le categorie che ho sempre
avevo senso per me di spostare le cose e io
non devi preoccuparti delle funzionalità di
la convenzione o convenzioni di denominazione di
categorie se questo cambia in qualsiasi momento
se non ci sono altre domande vorrei
come ringraziarti puoi solo tu puoi
sentiti libero di saperne di più su tutto
questa roba e ottenere alcuni video in più
il nostro test di prova Devine e tu puoi
contattami sempre su Twitter I
Apprezzo il vostro tempo vi ringrazio molto
tu
buone pratiche e errori orribili o
come ai miei amici americani piace dire bene
pratiche e possibili errori perché
a loro non piace fare del male agli altri
sentimenti e sono d’accordo sono d’accordo la maggior parte del
cose di cui parleremo del nostro possibile
errori sono solo un singolo specifico
punto di vista, ma proverò a spiegare come
il più possibile perché li penso
le cose sono possibili errori un po ‘
un po ‘di me e ho scritto un libro in
Il 2006 ha definito l’arte del test unitario
uscirà nella seconda edizione
e quando ho iniziato quel libro avevo zero
bambini, ma quando ho finito quel libro ho avuto
due bambini e quando ho finito il
prenotare ci sono voluti tre anni ho capito solo
quanto mi sbagliavo
e come le cose che ho scritto nel libro
sono già sbagliati quindi ho dovuto riscrivere
un po ‘ma per la seconda edizione
in pratica sto andando in realtà sono andato
a Goodreads e II ha segnato il mio libro come
tre stelle perché ne penso un po ‘
è sbagliato quindi spero che la seconda edizione
sistemerò un po ‘di quello in cui sono effettivamente
il processo di scrivere un altro libro
chiamato belle build e ho appena fatto
prenotare le note del team leader del software
pubblicato ma soprattutto se lo hai
tutte le domande o le cose dopo questo discorso
puoi sentirti libero di chiedermelo via
Twitter o semplicemente contattami in qualche modo
dopo il dopo la presentazione e io
voglio dire che tutto ciò che sei
andando a sentire sono basati sul mio attuale
fallimenti quindi ho fallito un bel po ‘ penso
Chad Fowler sarebbe stato orgoglioso e a
molti di quei fallimenti mi hanno insegnato tanto
che oggi nei progetti posso ottenere
i progetti per lavorare e avere unità
il test ha effettivamente successo
riuscire nel nostro debito nel nostro progetto sono
abbastanza nervoso questa è una grande folla
Ero uno scherzo
ora il primo errore è che le persone
credici solo facendolo un’unità
test renderà la vostra vita più facile voi
ascoltalo in tutti quelli che parlano dell’unità
testare che sei in fase di test è sorprendente
unit testing sarà più facile trovare
bug quindi immagina che quando ne hai 4000
i test unitari nel codice sono più facili da fare
trova bene bug che è assolutamente sbagliato
il più delle volte cosa succede quando io
venire a progetti e fare consulenza è
che i test stessi hanno bug
i test passano quando non dovrebbero essere
passando loro falliscono quando non dovrebbero essere
in mancanza e quindi non c’è fiducia nel
prova così come fai ad assicurarti che il tuo
i test non hanno bug che scrivi
prova per i tuoi test come fa il test
per i tuoi test come lo sai
non ha bug quindi scrivere un test per
i test per un test non funzionano che posso
ti dico che ora un modo per risolverlo
sarebbe lo sviluppo basato sui test in
che vediamo fallire il test e poi noi
vederlo passare senza toccare il test
quindi stiamo effettivamente testando questo test
ma la maggior parte dei progetti in realtà non lo è
più facile trovare bug se non si paga vicino
attenzione a cosa diavolo sta succedendo
nel codice e nei test e vedremo
come risolvere quell’altra cosa
tutti dicono che è più facile
mantieni il tuo codice quando lo hai
qualcosa come mille test di unità
quattromila test unitari e ancora
questo non è assolutamente vero perché il
prova se testano molto interno
l’implementazione con cui si finisce
che si refactoring il codice e quindi
improvvisamente hai dei test che si rompono anche
anche se in realtà dovrebbero passare
se il codice funziona ancora e così hai
per andare e iniziare a cambiare i test a
un certo punto inizi a dire che lo sai
ciò che questo non vale la pena il mio tempo
e quindi inizi a rimuovere i test o
in realtà commentandoli o inserendoli
ignorare gli attributi su di loro in modo che non lo è
necessariamente vero e lo direi
la maggior parte dei progetti che falliscono con i test unitari
è a causa della manutenibilità
rilascia uno dei primi progetti che
Ho dovuto cancellare alcuni dei
i nostri test dopo pochi mesi di
codice è più facile capire il tuo codice
quando ne hai mille a quattro
mille test bene so che lo sai
quello non è vero
per la maggior parte dei test che hai visto
la maggior parte delle persone soprattutto quando iniziano
fuori con le prove quello che vedono e che cosa
loro quello che pensano è che il test
il codice non è importante così solo loro
rinunciare a nomi come ah, prova uno o
prova una prova di porta qualunque e poi il
il codice di prova di per sé è solo no , solo
asserire sulla cosa ed essere fatto
con esso
e poi i test finiscono proprio come te
trattati loro che non aiutano in
termini di leggibilità, di cui parleremo
problemi di leggibilità anche oggi, ma
solo quando queste tre cose sono vere
in realtà è più facile sviluppare il tuo
software quando si hanno test unitari e
uno e molti dei motivi per cui farlo
con perché le aziende non adottano unità
il collaudo nell’organizzazione è perché
stanno fallendo con uno di quelli a
meno e poi quello colpisce l’altro
due che creano una catena molto grande
reazione il secondo grande errore è quello
una volta che hai iniziato a fare test di unità tu
non fai nessuna recensione di prova o
recensioni di codice quindi alcune aziende lo fanno
in realtà faccio recensioni di codice ma per la maggior parte
gli sviluppatori che conosco non fanno test
recensioni quindi rivedono il codice ma solo
un po ‘e solo i tempi specifici
ma il punto di una revisione del codice e a
recensione di prova è che tu insegni e tu
conoscere le pratiche in modo da poter avere
una persona che sa davvero come scrivere
buoni test unitari in squadra e così
la persona sta scrivendo lì, è solo
seduto lì a programmare test fantastici ma
allora tutti gli altri intorno a lui sono giusti
creare una pila di letame in giro così quando
vieni e vedi il test che vedi bene
prova e poi proprio sotto di esso un test che
non ha business essere lì e non c’è
pochissima comunicazione sul
qualità dei test quindi la recensione del test è
uno dei migliori modi per effettivamente
istituisci recensioni di codici perché se tu
ci pensano i test sono davvero mini uso
casi del codice che è possibile eseguire
dentro e tu puoi davvero capire
molto molto rapidamente se lo sviluppatore
effettivamente capito il requisito o
a volte solo guardando il
nome dei test che puoi effettivamente
capire che lo sviluppatore ha fatto
capire il requisito che non è necessario
anche bisogno di scavare nel codice di te
non devi leggere 50 righe per dire oh
Ora si sta facendo tutto sbagliato volte
se il nome è abbastanza buono, allora sì
salvato tutto quel tempo e quando si esegue il codice
recensioni e recensioni di test in cui deve essere
persona non è possibile utilizzare uno strumento se si utilizza
se usi github per fare recensioni del
codice e tutto ciò che fai è nei commenti sì
questo è un bene, ma è in nessun posto quasi come
potente come coppia che programma con quello
persona o addirittura addirittura a distanza
desktop o qualcosa di simile in cui tale
la persona può vedere l’ espressione del tuo
faccia dove puoi sentire il tono di
la loro voce perde molte informazioni
se chiedi alla persona qualcosa e loro
esita che è qualcosa che non lo fa
passare attraverso i commenti se continuano
fissando la loro risposta mentre lo dicevano
non passa attraverso quando scrivono il testo
vedi solo il risultato finale così puoi
dire dove ci sono cose che sono
debole la loro conoscenza è debole su di te
può aiutarli a imparare qualcosa o anche
meglio impari qualcosa da loro perché
perchè l’ hai fatto ?
che forse non avresti scritto
il commento su github
perché era solo una piccola cosa e
non ha niente a che fare con la corrente
revisione del codice ma l’hai appena visto e lui
detto e avresti voluto dire hey
Cos’era quella piccola cosa hai appena fatto
o che tu abbia scritto lì ma non è così
su quello che stai facendo e poi tu
non scriverlo nel commento e forse
è troppo grande per iniziare a scrivere il testo
su di esso nei commenti e così un intero
opportunità per imparare qualcosa di nuovo
si perde una nuova tecnica se la tua squadra è
imparare e non fare recensioni sul codice e
recensioni di prova lo consiglio vivamente
inizi a farlo se decidi di farlo
lo fa su tutto il codice tutto no
finestre rotte nessuna linea di codice dovrebbe andare
non revisionato anche se è una singola riga di
XML da qualche parte dovrebbe essere recensito no
finestre rotte perché se ti fai alzare
il bar e poi domani qualcuno ha detto oh
è solo un metodo in realtà non lo è
bisogno di farsi rivedere ma se lo sei
cercando di insegnare alla tua squadra come fare unità
analisi
questo è uno dei modi migliori ora quando il
cosa di cui voglio parlare devono
fai cosa con quei tre pilastri del bene
unit test che sono affidabili
sono mantenibili e lo sono
leggibile se non ti fidi dei tuoi test
e li vedi fallire o passare potresti
ancora voglia di entrare nel debug del tuo codice se
passano o se falliscono potresti
Dì ancora no, va bene
e uno dei punti di fiducia il vostro
il test è che dovresti essere preoccupato quando
falliscono così qualcuno ha detto oh questo è RTF
ma basta farli
RTM giusto test RTM ma se lo fai
Velocemente sarà RTFM e poi
è tutto fantastico e ho pensato forse
Dovrei aggiungere il più velocemente possibile dopo
un grande errore è che le persone usano finta
oggetti e tronconi per tutto quando
invece dovrebbero effettivamente usare
loro molto molto poco quindi andrei lontano
e diciamo che forse il 5% del tuo codice è attivo
il tuo test dovrebbe avere qualsiasi tipo di simulazione
oggetto e quando dico mock object I
non significa uno stub e la differenza
tra un oggetto finto nello stub
che un oggetto finto è qualcosa che
verificherà che verificherai contro a
la fine del test e uno stub è giusto
qualcosa che ti rende felice
potrebbe avere più stub nel test
ma potresti avere solo un singolo
simulare l’oggetto perché verifica un singolo
risultato finale lasciatemi essere un po ‘ più chiaro
a riguardo quando parliamo di unità
prova quando dico la parola unità in un’unità
prova cosa intendo è una unità di lavoro I
non intendo un metodo, non intendo una classe
o qualcosa di simile quello che voglio dire è
che potrebbero esserci più metodi o
anche più classi in esecuzione in memoria
e vengono richiamati da alcune API pubbliche
da qualche parte ma poi il test sembra a
API pubblica e poi succedono molte cose
in memoria non toccano il file
sistema o un database o qualcosa di simile
quello e poi alla fine c’è o
uno dei tre possibili risultati finali
potrebbe tornare un metodo giusto
questo restituisce qualcosa che potresti avere a
metodo void e quindi il metodo void ha
fare qualcosa
anche i metodi di annullamento della scrittura non restituiscono
valori ma perché li chiameresti loro
deve fare qualcosa e questo è
di solito per cambiare lo stato del
sistema e cambiamento di stato evidente in
il sistema e il terzo tipo di fine
il risultato è quando non cambiano il
stato e non restituiscono il loro valore
perché dovresti avere questi metodi quando tu
inoltrare le chiamate a terzi come a
una specie di logger o web API e solo
in quel terzo tipo di risultato finale fanno finta
oggetti in realtà alcun senso che è
l’unica volta in cui hai un
fire-and-forget
in un contesto esterno quando ci provi
testare su terzi senza una simulazione
oggetto c’è molto poco da controllare
che chiami Twitter nel modo giusto ecc
quindi se provi ad affermare contro di esso
sarebbe davvero molto difficile quindi
invece quello che faremo è che lo faremo
avrà un oggetto finto che assomiglia
il Twitter non è l’ API di Twitter ma a
facciata che lo astrae e se
è stato chiamato tutto è buono
questa è l’unica volta in cui oggetti finti
in realtà ha senso ma dal momento che
inizio di oggetti mock nel vostro in
testare persone hanno abusato e
usandoli molto di più solo perché loro
poteva e che ha poi creato un sacco di
test che sono molto fragili molto difficili da
mantenere ciò si spezzerebbe su ogni
piccolo cambiamento ad ogni interno
implementazione nel codice così il 5% è possibile
essere la quantità di chiamate che devi
esternamente le API sono nel tuo codice
è così che molti oggetti finti dovresti
ma ricordati che questo è solo un
scenario di fuoco e dimenticanza se si ottiene
licenziato qualcosa e ottieni qualcosa
indietro che non significa sempre che sia un
finto oggetto è ancora un mozzicone
dipende dal flusso di informazioni così
solo se il risultato finale è assoluto
chiamare una terza parte ha senso
usa un oggetto finto ora un altro molto molto
errore comune che vedo è che le persone
dimmi questo finto che tutto sia
la parola deride per tutti tranne che lì
dovrebbe essere una differenziazione ora se tu
leggi i modelli di test del libro xqe che hai
visto tutti questi test di cose testabili
vasca dei segni falsi e tutte queste cose significano
qualcosa per tutte queste cose
assomigliare ad altri somethings e quello è a
cosa molto molto complicata soprattutto
per qualcuno che è relativamente nuovo a questo
campo per capire e quello che trovo è
che se uso una terminologia più semplice
e non uso tutte queste cose che ho appena fatto
tre cose che parlo
Ho falsi falsi è tutto ciò
sembra qualcos’altro e poi
se se asserisco contro di esso, allora lo è
un finto se non asserisco contro di esso è
uno stub e questo è l’unico
differenziazione se prendi questa rozza
la grana del grano la differenziazione
puoi iniziare a parlare del
differenza tra mock e stub e
non chiamare tutto come una finta invece di
dicendo che sto per deridere questo sto andando
per contrassegnare quello che di solito si intende
Ho intenzione di mozzare questo sto andando a mozzare
che l’unica volta che dovresti dire che sono
andando a deridere questo è quando sei
aspettandomi che questo sia chiamato ma
anche i quadri usano la parola deridere troppo
molto e finta è molto molto sovraccarico
e di nuovo la differenziazione sei tu
voglio solo prendere in giro un segno per test come
stai mettendo alla prova una cosa che potresti avere
più stub quindi è necessario conoscere il
differenza terzo stato basato su uno dei
le cose belle che succedono sono quelle se tu
non usare oggetti finti che stai ricevendo
in un territorio di prova molto semplice
a volte si tratta solo di invocare il metodo e
quindi controlla che qualche stato lo abbia
cambiato ma puoi anche ottenerlo un po ‘
la preghiera in alcuni problemi, per esempio
potresti controllare che sia interno
stato è stato cambiato quindi immagina
linea bianca che porta il confine del tuo
API e test che invoca il pubblico
L’API dovrebbe essere valida solo su un’API
allo stesso livello nessun livello più profondo
perché se lo fai sei destinato ad arrivare
cose strane per esempio guarda questo
test aggiunge un utente in memoria crea a
utente e poi controlla che ci sia un
campo interno da qualche parte che ha il
utente in memoria ora questo test lo farà
culo ma non significa che il codice
funziona perché stai controllando l’interno
l’implementazione che sta per finire è
quello forse gli altri metodi quello
devono usare quell’utente lo stanno usando male
o stanno usando un campo diverso così
anche se l’implementazione privata funziona
non significa che l’unità di lavoro
funziona effettivamente allo stesso livello di
l’ API pubblica è meglio
implementazione dello stesso test se tu
potrebbe farlo creare un add
un utente e quindi verificare che è possibile accedere
in con il nuovo stato utente così evidente
la differenza in questo caso è che il
comportamento dell’oggetto o del sistema
sotto test è diverso da quello che era
prima di aver cambiato lo stato a
il metodo restituisce un valore diverso o a
metodo diverso restituisce un diverso
valore ma è ancora allo stesso livello
dell’API non sta controllando l’interno
implementazioni una delle più grandi
problemi che vedo e di cui ho parlato
questo è quello che le persone non si fidano
i loro test e uno dei più grandi
le ragioni per questo è che le persone mescolano unità
e test di integrazione insieme nel
stessa suite e li gestiscono tutti
insieme e poi i test di integrazione sono
di solito molto più abbinato alla corrente
implementazione della macchina locale per
esempio hanno bisogno di un qualche tipo di
configurazione e cosa vogliamo noi
voglio determinare che in questo caso unità
i test sono test leggeri che sono
ripetibile puoi facilmente rieseguirli
senza riconfigurazione sono veloci
perché non toccano alcun tipo di I / O
si spera che siano coerenti che siano
sempre gli stessi test quindi se lo sono
utilizzando data / ora l’ora del giorno corrente in
il test ogni volta che li corri loro
in realtà un test diverso potrebbero
restituire risultati diversi se lo sono
usando numeri casuali ogni volta che corri
loro sono un test diverso e il
il punto di questi test leggeri non lo è
per assicurarsi che tutto dappertutto
funziona ma per essere sicuro di avere un
la linea di base del software di lavoro che puoi
quindi riempire tutto il resto con l’integrazione
test
e lì dovrebbero essere facili da scrivere
e leggere di solito hanno bisogno di test di integrazione
molta configurazione e vedi molto
di magia come se venisse da me
non ho idea di come lo sapevi
la cosa in realtà esiste da qualche parte così a
realizzare tutte queste cose che servono i test
avere il pieno controllo delle loro
dipendenze significa che se ne hai
una specie di terza parte che crei
o uno stub o un oggetto finto e loro
dovrebbe davvero essere in memoria in modo che loro
può essere pienamente coerente. Sto andando
darti un esempio da un open source
progetto chiamato open layer quando ho ottenuto il
ultima versione di open layer e io solo
ha eseguito tutti i test questo è quello che è successo
puoi vedere molto verde ma poi tu
vedere alcuni rossi e il problema con questo
è che ti aspetteresti un progetto che ha
verifica che tutti i test siano
passando così immagina un programmatore nel tuo
squadra che sta ottenendo l’ ultima versione
del tuo codice sorgente poi eseguono tutto
i test e alcuni di loro stanno fallendo
Sono sicuro che non è mai successo a nessuno
uno di voi in questa stanza ma ce l’ha
mi è successo in alcune squadre e poi
qual è la cosa peggiore che puoi sentire
qualcuno dice quando chiedono perché quelli
i test stanno fallendo non ti preoccupare
va bene è solo un problema di configurazione
va bene e poi diventano quei test rossi
solo un fastidio invece di qualcosa
preoccuparsi di
e il grosso problema qui è che tu
non so quali test sono l’integrazione
test e quali test sono unit test o
test leggeri se avessimo una separazione
in un altro progetto che potremmo avere
facilmente detto che abbiamo un verde sicuro
Test di zona che dovrebbe sempre essere verde no
importa cosa e poi ne abbiamo alcuni
fiducia e se uno di loro fallisce noi
dovrebbe essere effettivamente preoccupato ma perché
sono misti e tendiamo a smettere di farlo
qualunque configurazione abbiamo bisogno di solo
far passare quelle cose perché abbiamo
cose migliori da fare con il nostro tempo così da
separando almeno diamo una sorta di
fiducia in una sorta di sicurezza e
più fiducia almeno in alcuni dei test
come un
il gruppo jQuery ha lo stesso problema quando
ottieni l’ultima versione di jQuery e
si esegue tutti i test di default si ottiene
questo bene in realtà si ottiene questo, ma se
lo fai correre ancora sette minuti prima
il modo in cui lo esegui di nuovo lo ottieni
ok, quindi era 137 ora è 136 fallito
cosa diavolo significa quello che sono io?
dovrebbe pensare significa questo
jQuery ha bug probabilmente non è quello che
significa che se inizi a scavare
intorno e inizia a guardare tutto il resto
i test che stanno fallendo stai andando
iniziare a dire cose come questa
oh hai bisogno di PHP e del server
in esecuzione localmente per essere in grado di eseguire il
I test relativi all’Ajax hanno senso, ma allora
questi non sono test unitari ma tutti quelli
i test che richiedono PHP sono nell’unità
cartella dei test e non c’è modo
per eseguire facilmente solo il test unitario di
jQuery quindi ho avuto così ho dovuto iniziare
guardandosi intorno e ovviamente pensavo
ha senso che tu debba farlo
avere PHP in esecuzione e ovviamente lo sai
Google ti dirà che hai bisogno di PHP
installato ecc. per far funzionare jQuery
non appena installato hai bisogno del server
in esecuzione con PHP e questi file sono
servito e ancora tu hai la fiducia
problema se volevo fare lo sviluppo
questo è un progetto open source quindi sono
comodo con il fatto che devo
impostare tutto e assicurarsi che
tutto funziona prima di fare il
prima cosa ma se questa fosse una squadra se
questo era un progetto in una squadra in un
società non mi aspetterei che lì
essere quel tipo di separazione di
non-separazione
Mi aspetterei almeno avere una cassaforte
zona verde che dice che questi sono tutti i
test unitari che dovrebbero passare n
importa che cosa importa se vogliamo
fidati dei nostri test dobbiamo rimuovere la logica
dai nostri test quindi questo è un esempio di
ancora una volta questi sono test di jQuery
questo è un test che genera effettivamente un
molto molto
stringa e ha un ciclo e ovviamente
quello sembra molto molto innocente ma il
il punto è che questa è una finestra rotta
qualcun altro guarda questo e dice okay
va bene scrivere loop a destra e poi
e poi in seguito qual è il punto di logica
è che se i tuoi test hanno dei bug è così
molto difficile trovare qualsiasi pezzo di logica
i tuoi test sono destinati a un certo punto
forse avere un bug in questo modo io
voglio evitare che il test dovrebbe essere solo
il test dell’unità dovrebbe essere molto molto chiaro
dichiarazioni semplici posso salvare tutto il
cicli e i numeri casuali e tutti
quella roba e li ho messi in uno speciale
cartella chiamata test di integrazione c’è
tutte le cose che richiedono una logica
e o qualsiasi altra cosa dal modo in cui non c’è
qualcos’altro di interessante qui è quello
se guardi la parte superiore del test qui
c’è un numero e questo è il numero
di un bug che hanno risolto perché lì
era un problema e quando ho quei bug
risolve specialmente quando è difficile
ricreare o richiedono speciali speciali
attenzione cosa mi piace fare è che io
separare quei test che ricreano bug
in un’altra cartella speciale chiamata bug
fissaggio o qualcosa del genere e, in
quella cartella speciale puoi avere tutto
questi animali pazzi perché ovviamente
questo è l’unico modo o quello è uno dei
solo modi in cui puoi ricreare questo bug tu
devi avere una stringa davvero lunga
potrebbe trattarlo da un file che potresti
generarlo si potrebbe avere in memoria
hai ancora bisogno di quella lunga stringa ed è così
farebbe comunque male alla leggibilità
o la manutenibilità o la fiducia di
i test quindi li ho messi in uno speciale
cartella e poi tutti quei test che sei
permesso in un modo per avere questi rotto
Windows perché è diverso
edificio con finestre diverse ma il
zona verde sicura e test leggero
non dovrebbe avere finestre rotte
ecco un altro esempio da un altro
prova questo è il controllo su
percentuali di lavoro con CSS e
diversi browser hanno persino messo a
il commento deve verificare questo come il
il risultato dipende dal supporto che il
il browser ha
per le percentuali delle dimensioni dei caratteri, se necessario
mettere il commento nella sua prima di tutto
probabilmente dovrebbe essere un test diverso con
un buon nome ma secondo che se potesse
hanno anche un diritto bug sembra davvero
Davvero innocente, ma anche l’innocenza
roba sono sicuro che tu ne abbia avuto più di
tre giorni di esperienza come sviluppatore
sapere che anche tre righe di codice che
sembra molto innocente potrebbe avere molto uh
bug ninna –scent una delle cose che
Io che ho visto in molte strutture in
i test dei framework open source sono così
c’è molta affermazione forzata
conta così tanti quadri
specialmente qunit in questo caso loro
sostenere l’ idea che tu possa dire come
molti affermano che avrete nel
seguenti test e poi se alcuni dei
afferma non eseguire i test saranno
rompi e dì no no me l’ hai detto
sarebbero cinque asserzioni ma c’erano
più o meno e per me no
penso che sia un grosso problema ma lo è
sicuramente una specie di manutenibilità
problema perché io non sai che è è
non è un grosso problema ma quando ho chiesto
John Resig perché dice che è un
po ‘di lavoro extra, ma è bene
sapere se la suite smette mai di correre
qualche strana ragione penso che non sia un
cattiva ragione per averlo specialmente se
ancora una volta gestisci un open source
progetto e non sai tutto il
persone che contribuiscono al tuo codice e
non ti fidi davvero di quello che faranno
ricorda di scrivere test in un modo simile
non rompere e forse un modo asincrono lo farà
non correre o qualcosa così forse in quello
in qualche modo ha senso
attuare questo ma serve ma ma poi tu
guarda i test che hanno 78 78 assert
atteso così dicendo okay questo sta diventando
un po ‘ fuori mano perché puoi
immagina di aggiungere un altro a quello
prova e poi dover andare al
iniziare e quindi aggiungere e sostituirlo
a 79 è come lavorare molto molto
alta società burocratica no questo è il
numero di asserzioni attese e, naturalmente
si sa che
le persone hanno iniziato a gestirlo
appena contato quanti affermazioni pensano
avevano e quando si aspettano hanno detto no no
hai un numero diverso loro giusto
cambiato a quel numero al
all’inizio e hanno continuato a continuare ad aggiungere
più uno e due e tre um allora poi
hai 119 questo è interessante questo è
solo l’inizio del test, ovviamente
e inizi a vederlo ora stiamo vedendo
un modello diverso per quale motivo noi
avere 119 affermazioni in questo test è perché
questo non è proprio un test, questo è un test
suite camuffata come metodo di prova e in
che metodo di prova stiamo testando tutti
le possibilità relative al punto jQuery
quando e poi quello che succede è il
gli sviluppatori sono quindi incoraggiati perché
vedono gli altri test per poi metterli nuovi
test in fondo a questo metodo e
poi cambiano l’aspettativa, quindi è così
davvero una suite di test camuffata e poi
ogni assert è davvero un test diverso
e poi ovviamente non puoi davvero
dargli un buon nome basta a
dare messaggi di errore veramente buoni lo faremo
parlare dei messaggi di errore in a
secondo poi si deve questo diritto questo
povero ragazzo voleva solo scrivere a
il semplice test deve ancora dire aspettarsi uno
ora in termini di leggibilità uno dei
cose che sono difficili da leggere quando ero
guardando le prove di jQuery che ero
guardando questo test e ho detto bene
ti aspetti la parola blog da questo
cosa a e2 di apparire in questo saggio P
cosa ecc ma dove dove lo fa
esiste realmente e quindi ho dovuto iniziare
pensare da dove viene questo e
da nessuna parte menziona dove il testo
è e, naturalmente, una volta che ti rendi conto che si
capire che il test Runner the
punto indice HTML test Runner in realtà
contiene tutti i dati di test e c’è
una condivisione è fondamentalmente condivisa
risorsa c’è una pagina HTML dove tutto
i test stanno funzionando e poi tu
devo andare e guardi questa pagina e
vedi, oh, va bene, ma tu
rendersi conto che tutti gli sviluppatori che
scrivere test per questo ciascuno di
loro
probabilmente aggiunge una linea a questa pagina
speriamo che non facciano quello che vogliono
fare è che avrebbero manipolare questo in
anche la memoria quindi immagina di avere
seimila test che manipolano tutti
stesso pezzo di HTML e tutti devono
coincidono tra loro hanno tutti
per assicurarsi che gli altri test abbiano
lo stesso stato ecc e questo è un po ‘
potrebbe anche essere un problema di manutenibilità
ecco un altro esempio da qualche parte
lì all’inizio di un tempo molto lungo
suite di test c’è una dichiarazione di a
variabile e poi da qualche parte in basso
c’è l’uso di quella variabile molto
molto fastidioso per cercare di leggere e
capisci quel test e poi cosa
succede che guardano ancora gli sviluppatori
l’originale finestre rotte e dire
okay tutte le variabili sono definite a
il massimo perché questo è iniziato all’inizio
come metodo di prova ma poi di più e
più cose sono state aggiunte così qualcuno a
un punto ha detto oh sai di cosa si tratta
sono cento linee di codice ma tutte le
I VAR sono in un posto dove non vado
fare una cosa diversa ovviamente giusto così
Metterò la var nello stesso posto
e la psicologia umana è allo stesso modo
giusti conosci l’esperimento che hai messo
tutti in un ascensore per le altre persone
ci sono attori in te e tu ne ottieni uno
persona per l’ascensore e tutti
si gira per non guardare la porta e
poi la persona che è l’aspetto innocente
a tutti se si gira dall’altra parte come
bene perché non sa che fa cosa
tutti gli altri fanno questo è il tipo di
punto è che qui invece di puntare
la fossa del successo che stiamo dando alla gente a
modello di come rendere il test di più
e più o meno e meno mantenibili
commenti Non sto parlando di
commenti regolari di cui sto parlando
commentando test cosa succede quando
hai queste cose nelle tue prove
può immaginare lo sviluppatore nessuno lo farà
mai cancellare queste cose in cinque
anni questi commenti esisteranno e il
la ragione non sa perché fossero
commentato fuori nessuno sa se
sarà un giorno commentato in
nessuno sa quale deve essere il punto
importante e quindi resterà lì
per sempre non fare nulla ma solo
facendo chiedere a tutti inutili
domande così dico anche alle persone quando lo faccio
insegnare unit testing è che immaginare che
la persona che leggerà il tuo
il codice è un serial killer che sa dove
tu vivi, non vuoi che inizino
facendo domande inutili ma in questo
caso che il serial killer sta per prendere
e chiede a X di venire a casa tua e iniziare
chiedendo hey di cosa si tratta?
davvero, per quanto riguarda la denominazione, è il nome
una delle cose che penso le persone
mi manca davvero di più in questo caso noi
avere un test per il testo con un indefinito
e poi alla fine notano che loro
c’è un messaggio l’ultimo parametro di
l’uguale è cosa mettere fuori cosa
stampare se il test fallisce e notare
il testo del messaggio non definito è concatenabile
ovviamente questa è una soluzione per il bug ma
allora la mia domanda è concatenabile
l’errore o è concatenabile alla correzione che
uno di loro è l’importante dovrebbe
è modificabile se non va bene così
il modo in cui mi piace chiamare mia prova è che io
avere tre pezzi di informazione
da qualche parte in modo che il lettore possa
capisco cosa sta succedendo e trovo
anche se ne tralascia uno di quelli
cose che il lettore sta per avere
domande e poi devono leggere il
codice del tuo test e in questo caso lo è
l’unità di lavoro o il punto di ingresso a
l’ unità di lavoro e quindi abbiamo
scenario che è in quali condizioni
stiamo testando in questo caso lo scenario
è indefinito e quindi previsto
comportamento e dovrebbe essere nel nome così
in questo caso sarebbe testo con
non definito e quindi scriverei
può essere incatenato o non dovrebbe essere incatenato
uno dei due ma vorrei scriverlo al
nome del test non al messaggio di
gli uguali o gli asseriti e in effetti io
sosterrebbe che non dovresti essere
scrittura
qualsiasi messaggio per come l’ultimo parametro
dell’asserzione perché se il nome del test
è abbastanza buono che non dovresti e
quando vedi solo il nome del test
non vedere tutti quei messaggi quando il
test fallito, ne vedi solo alcuni
e poi vedi la traccia delle statistiche ma il test
il nome è la prima cosa che vedi quando tu
avere un errore e se il nome del test è
abbastanza buono che potresti non aver bisogno di vedere
il codice del test prima di andare
il codice di produzione e iniziare a risolvere
qui è un esempio che chiamo il
prova di doom luci okay okay questo è
il test di sventura proprio lì e quando io
guardato questo test all’inizio
quello che ho visto è questo prima di tutto 78 noi
ne ho parlato ma poi ricordalo
è un test molto molto lungo ad un certo punto
inizi a capire che questo test
è una grande suite di test e poi a
qualche punto in cui inizi a vederti
inizia a vedere tutte queste cose in questo lungo
prova e inizi a dire okay che inizi
iniziare a leggerlo prima e poi
il tempo è sprecato, poi tu vai tutto io
capire questo è un test separato e
stanno facendo un tentativo di cattura perché se
non tutto il codice qui sotto si fermerà
il lavoro non eseguirà mai luci per favore
okay, quindi abbiamo più test in a
test singolo e questo è il massimo
readability incubo e il
manutenibilità incubo e un modo per
risolvere il problema avendo una specie di io
non conosco test separati per tutto
fai un test, penso che sia importante
cosa che possiamo fare ma che conduce anche
a queste cose all’inizio quando Q
l’unità era appena agli inizi
abusarne ed erano chiamando lui unità
ripristina all’inizio e al centro
e poi dopo ogni cosa che
deve essere ripristinato per esempio lo stato
ma questo è davvero solo un anti-modello
ogni volta che vedi questo, qual è il codice
ti sta davvero dicendo che vuoi davvero
diversi test da estrarre da
qui dal modo in cui noti che c’è un
come un uguale dentro e uguale che è
devo essere divertente per il debug
okay diamo un’occhiata al backbone ora backbone
sta usando anche le stesse idee
ma qui ci sono numeri magici che cosa
sono i numeri magici bene non è uno
due e tre ma che diavolo è –
cinque
ricorda il serial killer che guardano
questo e dici – cinque che sembra
interessante perché non segue
il modello giusto e tra l’altro al
in alto abbiamo sei mazzi previsti
quantità di affermazioni di nuovo ma qui il nostro
il cervello è progettato per vedere i modelli 1 2 3
5 – 5 che diavolo se fosse 4 potrei
Capisco che era – 4 Potrei avere
capito ma perché 5 perché hanno saltato 1
questo è un mistero che ancora non ho
risolto, ma solo tempo da perdere
il lettore così in termini di nominare facciamo
guarda il manubrio in questo caso
manubri sta usando gelsomino e in questo
caso Jasmine ti permette di avere nidificato
blocchi di cose molto simili alle nostre specifiche
Ruby ecc. Ma questo è un esempio di come
puoi avere la struttura ma non avere
uno stile adatto per la struttura, quindi se
guardiamo qui i nomi dei test
abbiamo descritto i blocchi e poi esso
array array okay e poi cosa dovrebbe
capita è nei messaggi qui matrici
ignora il contenuto quando array vuoti
scorrere il contenuto quando non è vuoto
beh, questo è il modo sbagliato di usare il
struttura perché ora la persona deve
leggi il tuo codice di prova per capire cosa c’è
suppone che sia in corso, se si desidera che il
test per iniziare a leggere come
documentazione possiamo guardare i test
in un modo diverso ecco come vorrei
strutturare le stesse prove descritte
i blocchi descritti sono descritti in seguito
avresti una descrizione nidificata dentro
questo è non vuoto e poi un esso
dentro che ti dice qual è il
previsto
Itera Salvatore sui contenuti e
quindi solo i blocchi descrittivi più il
Otto ti danno tutto ciò di cui hai bisogno
sapere senza guardare il codice di
il test è lo stesso con quello è vuoto
ignora il contenuto con indice usa il
indice variabile e tutto quello che ho fatto è stato
basti prendere i messaggi di errore e
da qui e poi in basso che il
il file e basta usarli in diversi
posti e questo mi ha dato molto più facile
modo per capire cosa sta succedendo
problema con knockout in knockout voi
hanno descritto dipendenze vincolanti
e poi guarda se il gestore di binding
dipende da inosservabile invoca il pulito
gestore desidera e il gestore dell’aggiornamento
ogni volta che un nuovo valore è ecc ecc ma è
il se questo mi infastidisce di tanto in tanto
questi sono quadri meravigliosi ma penso
il test potrebbe essere più leggibile quando si
avere il se questo è fondamentalmente il
lo scenario giusto hai la cosa che
tu chiami l’unità di lavoro quindi noi
avere il se qual è lo scenario e
quindi contiene anche l’attesa
comportamento quindi sta combinando questi due
pezzi di informazione, ma poi di nuovo
forse questo sarebbe un modo migliore
descrivere la dipendenza di legame descrivere
quando il gestore dipende da osservabile un nuovo
valore disponibile invoca l’init
gestore ha anche senso in inglese
puoi effettivamente leggerlo come una frase
e penso che gli autori intendessero fare
questo, ma non penso che lo sapessero
sulla possibile struttura che tu
può avere e il nidificazione che si potrebbe
fare per renderlo ancora più chiaro ora lì
è un altro problema comune che è quando
hai set up e tu se lo hai mai fatto
set up usati questo è Batman J s in
Batman è uno dei file sembra
questo c’è che stanno usando
CoffeeScript per alcuni dei test quindi
l’ installazione sembra che abbiano un
spia in questo caso la spia è una finta
oggetto e da qualche parte lungo il file loro
inizia a usarlo
il problema è che la spia ha creato il
il metodo di installazione è usato solo in alcuni dei
test
Va bene così stiamo controllando che siamo
in pratica lo si usa come oggetto fittizio in
tutti questi posti, stiamo affermando
contro di esso
ma ci sono un paio di test che
non usarlo così diventa il metodo di prova
meno leggibile perché quando guardi
si inizia a dire oh tutte queste cose
importa, c’è qualcosa , tutto
le prove o meno e poi devi
iniziare a dissezionare nuovamente il codice, quindi se
hai mai voluto iniziare a refactoring questi
serie di metodi sarà molto
difficile perché non sai quale
dipendenze che i test dipendono da questo
se devi usare un metodo di configurazione make
Assicurarsi che solo mettere le cose in esso che
si applica a tutte le prove del
file ma se è solo per alcuni dei
test nel file mi basta usare un
metodo di factoring direttamente nelle prove
in realtà non mi piace usare l’installazione
metodi a tutti vorrei solo mettere il
metodo di fabbrica la maggior parte del tempo e
creo la spia per ogni test che trovo
è più leggibile e quindi il lettore
del test non deve cercare
più posti per capire cosa c’è
andando avanti e mentre ci siamo , sono io
non pensare che sia una grande idea testare
più cose nella stessa prova, penso
che rende il nome del test molto molto
generico quindi forse in jQuery è il
modello che si è evoluto ma io no
pensa che questo sia un buon modello per l’utilizzo
ogni altro quadro penso anch’io
che se tu sei se tu se hai un tale
breve test ma stai testando guarda
il nome che reindirizza utilizzando il reindirizzamento in
un’azione impedisce il rendering implicito
non sono sicuro di cosa impedisca il rendering implicito
significa, ma se guardiamo alle affermazioni che abbiamo
Dì che batte batte l’ app attuale
la lunghezza delle sottoview è zero
forse è quello che impedisce in realtà
significa, ma poi c’è che sto facendo
sicuro che il reindirizzamento di Navigator fosse
chiamato
ora domande interessanti perché me ne importa
che è stato chiamato è solo un
implementazione interna possibile e
quindi non ho bisogno di affermare che io
solo bisogno di affermare sul risultato finale
che è questa lunghezza è zero perché
allora se non ho bisogno di questa linea allora
domani posso rimuovere tutti questi
finché il risultato finale è ancora zero
il mio test non si romperà, ma se questo è
importante se davvero questo metodo che ha
due risultati finali che è possibile a
il metodo può avere più risultati finali ma
ogni risultato finale dovrebbe essere testato
separatamente e ho un buon nome allora io
avrebbe un test diverso che dice
quando lo chiami
per esempio, chiama reindirizzamento del navigatore
ma lo separerei perché in questo
caso se uno di loro fallisce non ne sono sicuro
se in realtà è un problema o no e
a volte specialmente nell’interessante
la gente del mondo inizia su finta
oggetti solo perché possono ma
non significa che dovrebbero e quando noi
guarda tutte queste cose insieme
scoprire che abbiamo quei tre pilastri di
buoni test unitari devono essere leggibili
devono essere mantenibili hanno
essere degno di fiducia se non ti fidi
i tuoi test non ti disturberanno
leggendoli se non lo fai se non puoi
leggi i tuoi test sarà molto
difficile da mantenere e se non puoi
mantieni i tuoi test non andrai mai
per farli entrare in qualsiasi tipo di a
Stati affidabili quando iniziano
in mancanza ringrazio molto e se c’è
ci sono domande che abbiamo qualche minuto
così quando sarà la seconda edizione
ho rilasciato alcune domande su mia madre
e io alcune persone hanno capito lo scherzo
il regolatore non ha un futuro nessuno
sa cosa sia il regolatore tranne me
quel tizio va bene, secondo la seconda
sono stati rilasciati questo mese dovrebbe essere
rilasciato questo mese tu lo dici solo
la terza parte dovrebbe essere contrassegnata su cosa
durante il test contro il tuo repository I
spesso trovo che voglio controllare che il mio
il repository è stato chiamato in un modo specifico
Capisco perfettamente se hai un
repository e i test devono essere utilizzati
una sorta di database quindi direi
non fare test unitari su di esso non lo farei mai
creare un oggetto fittizio di un database e
Dimostrare che alcune query sequel erano
effettivamente chiamato e la ragione è
perché il repository contiene anche a
pezzo della logica che vorresti
prova per esempio la struttura il
lo schema è un esempio di ciò
logica e quindi se hai qualche tipo di
repository userei solo integrazione
test per testare il livello dati contro
quel repository e lo metterei dentro
altrimenti una cartella separata
essa non avrebbe senso il test sarebbe
molto molto fragile e ancora non lo sarebbe
Dimostrare che qualsiasi cosa ha funzionato
avere la query perfetta che passa nel tuo
prova ma se hai ottenuto lo schema sbagliato
il tuo test la tua applicazione sarà in realtà
non funziona
integrazione tra test di separazione e unità
test usi categorie di test o
se dovesse essere un progetto separato, non lo farò
in particolare utilizzo le categorie di test che trovo
che la separazione fisica è una migliore
pozzo di successo che ho visto usare
categorie ma mi piace il fisico
la separazione mi dà una che mi dà un
secchio fisico da guardare quando sono
seduto con qualcuno e stiamo accoppiando
insieme abbiamo due progetti e poi
Dico bene quale progetto riscrivere questo
testare cosa succede con le categorie
che si finisce per decidere se vi ricordate
in quale categoria questo dovrebbe essere davvero
e a volte il punto è questo
è così importante che lo preferirei
essere una cosa fisica e spostare le cose
ma ho visto persone che usano con successo
categorie quindi direi che è più di un
preferenza personale di uno specifico
problema con le categorie che ho sempre
avevo senso per me di spostare le cose e io
non devi preoccuparti delle funzionalità di
la convenzione o convenzioni di denominazione di
categorie se questo cambia in qualsiasi momento
se non ci sono altre domande vorrei
come ringraziarti puoi solo tu puoi
sentiti libero di saperne di più su tutto
questa roba e ottenere alcuni video in più
il nostro test di prova Devine e tu puoi
contattami sempre su Twitter I
Apprezzo il vostro tempo vi ringrazio molto
tu
Please follow and like us: