
come istruttore e consulente
ogni tanto mi stupisce sempre come
riluttante è il nostro personale a fare test
per il codice che scrivono e io no
sai perché scrivono il codice e solo loro
provato con i loro dispositivi e inviarlo a
il cliente e chiedere al cliente di provare
il loro codice è come chiedere al cliente
vai tu per primo
ti prendi cura di questo dimmi come
funziona e se funziona bene e io solo
voglio sapere se c’è qualche problema
probabilmente qualcuno di voi starà pensando
che non è così importante da fare
test per piccole cose per piccole applicazioni
perché dopo tutto quello che stiamo facendo è
solo app per dispositivi mobili che sono
non quel bene importante in realtà loro
sono ma anche le cose più piccole che noi
usato richiede alcuni test a volte noi
voglio essere sicuro che queste piccole cose
funziona perfettamente prima di usarli anche
ci consideriamo professionisti a
almeno questo è quello che voglio pensare
me stesso e se siamo professionisti noi
vorrei confrontarci con
aziende come la NASA come la
presentazione che abbiamo avuto oggi per il
keynote voglio dire come fanno un sacco di
test sono stati in grado di mettere questo a
rapina Marte così precisamente perché loro
stavano facendo molti test prima di loro
stavano facendo test di unità che non erano
facendo il test di integrazione perché come
lei ci ha spiegato che non è possibile
per testare tutto prima di inviare il
roba su Marte ma almeno lo erano
cercando di mettere insieme tutti i pezzi
averli pronti e testati prima
mandandoli su Marte perché è così
costoso è anche costoso per il nostro
aziende per creare software e inviare
li ai clienti senza aver provato
che da qualche parte prima, quindi, vorrei chiederti
non considerarti un artista o
un giardiniere che non può testare i risultati
del loro risultato ma considerare alcuni a
considerati un professionista e prova
per dimostrare che quello che stai facendo è
completamente giusto così oggi ho intenzione di
parlarti di TDD e come fare TDD
controllando le dipendenze e bene come
Ho detto che il mio nome è Kirk i tuoi denti e
questo sarà, parlo di come
l’architettura ci ha aiutato a fare TDD lo faremo
parlare di TDD prima di come è la vita reale
entra in TDD e rovina i risultati di
la nostra buona volontà e poi quanto mi ha aiutato
noi per avere un orso un’architettura che
può essere completamente testato e ci ha aiutato a fare
TDD quando stiamo sviluppando per mobile
dispositivi e per OS 10 quindi iniziamo
con TDD e perché non voglio esserlo
una di queste persone che inizia a parlare
sugli acronimi senza spiegare cosa
TDD è lo so che probabilmente tutti
qui sa cos’è il TDD ma lasciami dire
lascia che ti ricordi che TDD è
sviluppo guidato da test e questi
lo sviluppo basato sui test significa che noi
scrivere le prove prima di fare qualsiasi reale
codifica che significa che sappiamo ciò che noi
voglio provare prima di scrivere un codice e
beh questo è molto importante perché ora
stiamo cambiando il paradigma e lo faremo
invece di scrivere il codice e provare
per dimostrare che funziona perfettamente
quello che facciamo invece è creare quello
che sappiamo che questo codice dovrà
passare e poi scriveremo un codice in
Per farlo funzionare non so come
a lungo in cui tutti voi avete lavorato
sviluppo probabilmente molti anni per noi
ci sono stati molti progressi e noi
iniziato con questa sensazione di scrittura
qualcosa e digitando qualcosa su a
tastiera e scrivi in un piccolo programma
e fa qualcosa di buono che è gentile
di progresso ma poi ci piacerebbe cambiare
lo stadio di essere in grado di fare ciò che noi
volevo che i nostri programmi non fossero solo
fare qualcosa ma noi ci aspettavamo
loro per fare il prossimo passo da quello
test posso dimostrare che il programma
fa quello che voglio che faccia ma c’è
ancora di più puoi andare a fare TDD e poi
puoi dire che dirò di cosa si tratta
ottenere param sta per fare e lo farà
dimostrare che lo farà
perché sta passando le prove questo è
il sentiero per il Nirvana va bene così una volta
sono passati attraverso tutti questi passaggi si
arrivare al palco dove sai che il tuo
il codice sta facendo tutto ciò che eri
pianificando perché sta passando tutto il
prova che hai in programma in anticipo come
lo fai come scrivi?
test per farli passare e a
Coprire completamente la portata del tuo
applicazione bene la prima cosa che
devi tenere a mente sei tu
solo per testare il tuo codice e questo è
qualcosa di molto importante se lo sei
scrivere un dato fondamentale
applicazione probabilmente non vuoi volontà
probabilmente sai sicuramente che non vuoi
verifica che una richiesta di recupero esegua quella
è il codice che Apple ha scritto per noi è
lavorando correttamente non lo vuoi
è mele affari funzionerà bene voi
voglio solo scrivere un test del genere se
vuoi dimostrare che stanno facendo
qualcosa non va bene, ma non è così
di solito il caso di solito quando trovi un
borsa come 99 per cento su 100 è
colpa tua supponiamo che va bene così
qui quello che vuoi fare è solo test
il codice che stai per scrivere
solo un livello di astrazione che
significa che mi concentrerò sulla parte superiore
API il livello di API che sto servendo
ad altri moduli quindi se questa è una classe
c’è un’interfaccia pubblica che è
offrendo metodi ad altre classi e
questo sta per questi sono i metodi
che ho intenzione di provare i metodi che
Svilupperò test solo per il
i metodi pubblici di solito la gente pensa oh
questo metodo è molto importante
voglio sapere che funziona correttamente ma
questo è privato, quindi come faccio a provare che il
cosa che devi fare è provare il
metodo pubblico che usa quello
quindi eserciti quel metodo il privato
uno ma devi solo concentrarti su
testare quelli pubblici se un metodo è
privato e non hai accesso a te
non ho accesso a ciò che fa
non ha senso, non ha senso averlo a
trucco che i test in esecuzione per voi ancora
non ha senso avere il privato a
metodo in modo che solo i metodi pubblici uno
asserzione per test bene che non lo è
in realtà la vera asserzione è ciò che tu
sospetto che il test da fare
a volte puoi averne più di uno ma
la cosa che devi tenere a mente
è che se fallisce un test fallisce deve
fallire a causa di indovinare una ragione per cui tu
hai bisogno di un test
un difetto che te lo dice
c’è qualcosa di sbagliato ma indovina una cosa
perché se un test sta fallendo e lo è
offrendoti un sacco di cose che può
andare male, allora è più difficile per te
scoprire qual è stato il problema nel
il primo posto alla fine deve essere il test
indipendente dalla sequenza e uno stato se
corri i test in un ordine diverso
o se il test la X la classe che
stai esercitando la lezione che sei
test ha qualche stato precedente si vuole
devo iniettare quello stato nel test
che deve essere eseguito non come risultato di
test precedenti ok questi sono generali
regole penso che siano abbastanza facili
rispettare ma poi avvia il TDD
la danza e la danza TDV è ciò che fai
quando vuoi sviluppare TDD in TDD tu
inizia scrivendo come ho detto i test così
quando scrivi un test hai qualcosa
che bene fallisce
Voglio dire, è letto allora il test a
il codice è scritto per superare il test e
allora spero che tu abbia qualcosa che è
verde è passato il test allora hai
la possibilità di migliorare il tuo codice che puoi
refactoring e refactor spiacente e refactoring
significa che il refactor della speranza significa che il
il codice farà lo stesso e tutti
i test dovrebbero essere ancora in corso ma
puoi fare cambiamenti al tuo codice che sono
richiesto che aiuti la leggibilità di
il tuo codice che aiuta il codice ad essere di più
concisi che tutto ciò che soddisfa
il tuo scopo e puoi refactoring in
per avere un metodo che eviti
ripetizioni cose del genere ma ogni
il test deve ancora passare dopo
lo stadio di refactoring quali sono i
processo di fare TDD bene il processore
il primo Pro è che avrai il codice
che è coperto al 100% il che significa che
hai codice mi spiace per i test
ogni riga del tuo codice se non ottieni
che quando stai facendo TDD è perché
stai tradendo te stesso
dicendo bene, non ho bisogno di testarlo
allora non è coperto ma se lo fai
TDD correttamente e tu ti trattieni
te stesso da scrivere qualsiasi riga di codice
prima di avere un test per che tutto
sarà coperto perché stai pensando
riguardo ai test sei più sensibile
ai casi limite sei anche di più
sensibile alle cose che non eri
pianificare in anticipo quindi quello che hai è
la capacità di rilevare scenari che se
non fai il test prima di te
non noterei i progressi che fai
quando fai le vite, può esserlo
misurato intendo come tu lo sai
stai facendo dei progressi perché tu
avere più test che stanno superando ogni
tempo che stai scrivendo ed è
più facile introdurre cambiamenti perché quando
tu introduci un cambiamento che conosci
immediatamente come influisce sul resto
del tuo codice di cui alcune persone si lamentano
quanto tempo ci vuole per scrivere i test e
Sono d’accordo che ci vuole del tempo per farlo
testare correttamente ma è anche vero
che dal momento che stai facendo il test
in anticipo il tempo che trascorri sul
il bagging è meno e questo ti aiuta
la tua produttività è anche quella
sei in grado di ottenere un maggiore disaccoppiamento
codificare le dipendenze esplicite singole
responsabilità all’interno delle classi
può fare il parametro autopilota
è essenziale per le persone che non lo fanno
dormo molto intendo che tu sai che il codice
sta funzionando correttamente perché lo sei
scrivere un test e sta passando il
prova ok anche tu puoi arrivare ad un semplice
design perché una delle cose che
tu provi a fare quando stai facendo test
è quello che viene chiamato Jack Knee non lo è
ne avrò bisogno
non metti le cose nel tuo programma
che non sono richiesti ancora così qualunque cosa
scrivi nel tuo programma è qualcosa
ciò è richiesto istantaneamente e questo è
perché lo provi la verità è che il
le cose dalla parte giusta non lo sono
in realtà è vero sempre ma sono vere
il più delle volte e loro almeno loro
aiutarvi ad avere un modo per renderli più facili
ok, quali sono i lati positivi degli svantaggi
le persone non inizierebbero a pensare
su TDD la prima volta che lo dici
la gente del nostro TDD pensa che sia così
mettere il cavallo prima di un carrello
e ora devo pensare a provare
qualcosa che non ho nemmeno scritto
eppure così bene che in realtà non è vero
perché quando vuoi andare a
ristorante e vuoi ordinarti
non so come il cibo sta per essere
o come ti sentirai un pazzo
dopo aver mangiato il cibo così si passa attraverso
il menu e chiedete alcuni piatti e
li mangi e speriamo che superino il
prova okay
altre lamentele sono che ci vuole
più a lungo ma come ho detto prima ci vuole
più inizialmente, ma non è vero
ci vuole più tempo tutto il tempo perché tu
prendere in considerazione il tempo che
non spendi nel debugger quale io
non so voi ma per me spendere
il tempo nel divisore è stancante perché
bene intendo come a volte questo corro
anche in questo caso il problema è lì ma
Non so come risolverlo, quindi ci provo
ancora e ancora e ancora non capisco
per risolvere il problema bene quando sono
scrivendo il test so perché non lo è
passando ok c’è una iniziale
investimento sono d’accordo su quello che penso
devi fare più cose per ottenere una base
caso in esecuzione, ma va bene paga
in seguito e penso che valga la pena
spendendo quel tempo alcune persone e lì
è stata una serie molto bella di video in
YouTube con David Hannah Mayer e
Cartella Martin e tornò e che il
titolo è è TDD morto ed è molto
bella serie e uno dei punti era se
Sto facendo TDD
Non ho una mente big-picture così
il mio progetto non è così buona come sarebbe
se passo un po ‘di tempo a lavorare su
progettare e poi fare lo sviluppo
ma la verità è che non c’è nulla in
TDD che ti dice di non lavorare nel
disegnami per iniziare con TDD quindi io
non pensare che sia un problema o lo è
vero è proprio vero che se il
i requisiti cambiano devono essere i test
leggendo non solo il codice ma il
test e questo richiede più tempo anche lo è
vero che hai bisogno di più test quell’unità
prova fino a quando si tratta solo di test unitari
e ce n’è probabilmente di cui avrai bisogno
test di integrazione avrete bisogno di un qualsiasi
un altro tipo di test come caricare in basso come
test delle prestazioni e qui sei solo
una messa a fuoco sul test dell’unità ma
non è male per TDD, voglio dire che è così
qualcosa che si dovrà fare
comunque alla fine la gente dice bene se io
scrivere TDD il mio codice sarà migliore
bene il vostro codice sta per essere buono come
il tuo test intendo se tu
codice corretto che non è leggibile e tuo
il codice è negativo per il TD dei tuoi test TDD
sta per essere cattivo che non sta andando
per cambiare quanto è buono il tuo codice
quindi il mio punto è che se fai TDD e
vuoi e sviluppare questi
le applicazioni che si sta lavorando in su
in futuro, in modo TDD si vuole
ottenere un risultato finale migliorando
continuamente il codice che scrivi
mentre fai i test ok, ma
andiamo nella vita reale probabilmente alcuni di
voi se non quanti di voi hanno provato
TDD almeno una volta
bene, va bene, quindi quanti di voi fanno TDD
il più delle volte va bene così che cosa sono
dicendo che sì, ci proviamo ci piace
sta per essere la mia prossima vacanza siamo
partendo da zero ho intenzione di scrivere
la prossima lezione e ho intenzione di scriverlo
usando TDD ma che la vita entra nel
al centro di quello e volevi fare il
prova ma qualcuno ti sta chiedendo di avere
la classe pronto avete una scadenza che
non passa il primo test che tu non fai
sai perché, ma non sta funzionando così bene
ok , dimentichiamoci di TDD e facciamolo
come abbiamo fatto prima buona parte del
le cose che sono più difficili da testare sono le
Interfaccia utente la parte visiva della tua applicazione
e le persone a volte iniziano a provare a farlo
il test dell’interfaccia utente e bene pensiamo
vivere questo è troppo difficile come faccio a emulare
i tocchi come faccio a sapere il
le informazioni che è necessario per essere
testare loro faccio testare se il colore
è che o non faccio testare il font do I
prova la dimensione della vista cosa fare
Devo testare lì discuteremo a
un po ‘su questo in un momento
un’altra cosa che potrebbe essere difficile da fare
il test è la persistenza
almeno la nostra relazione con la persistenza
la maggior parte delle nostre applicazioni ne sta usando alcuni
tipo di dati è un dato di fatto ma poi in
per provare la tua logica aziendale
è necessario disporre di alcuni set di dati che si desidera
di sapere che questi dati sta per essere
disponibile e che i dati soddisfano il
requisito di testare quella parte del
logica e poi si inizia ad avere piccoli
set di dati e quindi si inizia ad avere
bene cosa devo fare lascio i dati
lì ho due pezzi di dati
uno per la produzione e quello che io
che sto usando per testare mmm
quindi parleremo un po ‘di
come risolverlo finalmente e questo è
questo è per le persone che hanno lavorato
con Swift o con altre lingue come
molti di voi hanno usato anche Swift
Almeno per divertimento oh ok quanti di voi
ho usato le estensioni del protocollo molto bene
quindi le estensioni di protocollo sono in Scala loro
sono chiamati tratti per quelli di voi che
hanno provato anche Scala e forniscono
le classi con ulteriori
funzionalità che può essere complementare
a quello che hai da
eredità abbiamo pensato di avere tutto il
cosa che ottieni dall’eredità così
è un vantaggio che fornisce con a
modello di design pulito e pulito per alcuni
roba e lui evita di più
dei problemi di ereditarietà multipli
che hai in altre lingue così
i commerci sono molto interessanti, il problema è questo
le negoziazioni sono un’estensione del protocollo e a
protocollo come già sapete è
qualcosa che non ha un’istanza
è questo sì una dichiarazione di intenzioni
lo dici usando un protocollo di metodi
ti stai impegnando per un attrezzo ma
non hai alcun codice per quelli
metodi ancora quando aggiungi un protocollo
estensione per quelli che stai dicendo bene
questa è un’implementazione generica e io sono
sarà in grado di utilizzare questo generico
implementazione per queste classi voi
avere restrizioni per applicare il
protocollo ma questo codice non sta per
avere qualsiasi istanza a meno che non si applica questo
protocollo a una classe reale, quindi come fare
prova qualcosa che non ne ha
esempio di chi parlerà anche di
questo quindi parliamo di TDD e
rapido e ho messo un piccolo – non c’è
significa che quello che sto dicendo è
non Swift square Swift – quindi parliamo
su come fare il test dell’interfaccia utente così
beh probabilmente tutti voi sapete che Xcode
ti stava offrendo la possibilità di scrivere a
test di unità così dispiaciuto non test unitario
Test dell’interfaccia utente Credo che sia stato segnato cinque
qualcuno può correggermi su quello che eri
usando javascript ora puoi usare Swift
da Xcode 7 su e bene questo non lo è
unità di test questo è test di integrazione
perché quello che stai facendo in realtà è
stai eseguendo l’intera applicazione e
stai provando a premere quel pulsante per leggere
quell’etichetta o scorrere su quella cella
questo è completamente diverso dall’unità
testare questo non è sbagliato non sto dicendo
che questo non può essere buono per il tuo
applicazione sto solo dicendo che questo è
non test unitari e questo non aiuta
noi di fare TDD Va bene così abbiamo la stessa
problema con altri quadri per
test che diamo per zucca o cetriolo
il nostro test di integrazione così da quando TDD è
sui test unitari sull’isolamento di
il nostro modulo e test che modellano il
modulo isolato come lavoriamo con quello
bene se usiamo un’architettura che
disaccoppia tutta la nostra logica, allora è così
più facile per noi essere in grado di lavorare con
la vista in modo separato quindi la vista
sarà per lo più passivo passivo
e accetterà solo un
comandi dal resto della nostra logica e
fornire al presentatore gli eventi
quello accade alla vista e bene alcuni di
potresti star pensando bene un altro
architettura bene questo non è mio
architettura questa non è la mia idea ma
questa è l’idea che viene dallo zio
Anche l’ architettura di pulizia di Bob è così
un miglioramento su altre architetture
come l ‘architettura della cipolla o il
esagonale così che tutti questi intelligenti
le persone hanno pensato bene
dobbiamo davvero concentrarci sull’avere single
responsabilità e avere single
responsabilità e un buon modo per
comunicare le cose è inizialmente difficile
ma se lo fai correttamente è molto
più facile da testare e
se hai questa visione completamente
isolato e senza alcuna logica in esso
è molto più facile da testare che non voglio
tu per prendere la mia parola per questo voglio
vi mostrerà un certo codice di come fare in modo che
questo è come dire che la tua cella di tabella è un
sottoclasse di una cella di tabella UI che puoi
guarda qui e questo è in realtà un vero e proprio
quindi è quello che sarò
mostrando al workshop in due giorni e
come puoi vedere qui ne hai tre
sbocchi e le tre prese sono per
ciascuna delle tre etichette che sono
sarà presentato in questa tabella
cell ho tre metodi e questi
tre metodi sono implementati qui e
sono dichiarate in questo protocollo che
è il protocollo che verrà utilizzato
dal presentatore quindi questi metodi sono in
per cambiare questi tre campi il
nominare il titolo e la data e l’avviso
qualcosa che è molto importante qui
la data in cui potrei passare uno stato interiore per
esempio che è l’ oggetto che
fornisce una data all’interno di Coco ma non lo sono
facendo ciò perché non voglio il mio
viewcontroller il mio punto di vista per essere intelligente
abbastanza per tradurre la data in
qualcosa che può essere usato in una vista I
vuole solo la vista per visualizzare il testo o
colori o cose che sono fatte abbastanza
va bene così quando ho questo è molto
più facile testare che non so come
bene questo legge da dietro ma lasciami
ti aiuto con questo ho un metodo qui
c’è quello che sta effettivamente facendo il
test e quello che faccio è creare un
etichetta che si basa su questo finto che io
ho scritto questo è Swift
lo sai che Swift è
non buono come obiettivo-c in termini di a
spedizione dinamica in così tutti i
librerie di derisione che deridono le strutture
che eravamo abituati e che amavamo prima
non possono essere usati in Swift ma
non è un grosso problema perché possiamo
scrivi i nostri mock nei nostri casi di test
e questo è quello che sto facendo qui io sono
creando un’etichetta derisione che è a
sottoclasse di UI label I’m over ray
sovrascrivere la proprietà text che è il
uno che viene visualizzato quando si dispone di un a
etichetta e qui quello che sto dicendo è bene
se questa proprietà ha detto dopo che è stata
ho detto che voglio mettere questa bandiera a due a
vero quello che sto dicendo è che voglio
per sapere se questa proprietà è stata utilizzata
è stato impostato bene, quindi è molto facile
qui quello che faccio è ok voglio usare
questa etichetta deride come l’avviso dell’etichetta della data
questo è questo è quello che ero
menzionando che non ha intelligenza
di fornire qualsiasi formattazione del della
data ma mostra solo il testo
hai fornito ciò che faccio qui sono io
esercizio uso il metodo che voglio
test che è la data di visualizzazione inviata
e io uso questi che è una costante
Ho definito prima qui poi ho
arriva a controllare se l’etichetta è stata
usato questo il testo è stato impostato e bene
il valore è quello corretto il gioco è fatto
molto facile da testare e funziona non solo
con queste cellule ma con una vista
controller il controller di visualizzazione tabella può
essere testato è hey questo e l’unico
requisiti che definisci il corretto
protocolli per astrarre il
comunicazioni tra i diversi
classi
la persistenza stessa cosa qui intendo
come se fosse un requisito per le cose
che dobbiamo fare per avere la costanza di
avere gli oggetti adatti disponibili per noi
lì ma ma non abbiamo davvero bisogno del
oggetti da perseguire per essere
in grado di testarlo, quindi quello che vogliamo è
fornire una classe astratta un protocollo
che ci fornirà i dati che
abbiamo bisogno in quel momento per quello
prova quindi questo è un po ‘di più
versione elaborata dell’architettura
che ti mostro prima che questa fosse la vista
che stavo dicendo che non è solo
la vista ma anche il controller della vista
questa è la responsabilità del presentatore
del presentatore come ho detto sta ascoltando
agli eventi che vengono dalla vista
e facendo tutte le logiche di presentazione come
il nome implica la logica di presentazione
può essere qualcosa come la data è
formattato come per gli europei o per
Americani che è diverso o può
essere anche qualcosa come la data è
formattato in modo relativo in modo relativo
ad esempio se usi Twitter
uso dell’applicazione a volte chi preferisce
avere la data rappresentata come 30 secondi
fa o due giorni fa invece che a quello
momento in tempo preferisco sapere
da quanto tempo è passato da questo tweet
di avere qualcosa che mi viene presentato come
la data e l’ ora effettive per quello
evento quindi qui hai una presentazione
la logica è possibile modificare tale comportamento e
questa logica accadrà qui nel
presentatore dell’interattore l’interactor
è la logica della logica aziendale del nostro
applicazione questo è dove il caso d’uso
le liste delle storie d’uso accadono e questo
interactor a è agnostico del
persistenza che usiamo e il
presentazione che ci accingiamo a fare
con esso quindi si prende solo cura del
logica aziendale di ciò che vogliamo fare
allora abbiamo questo modello di repository
questa è una classe che ostacola l’accesso
i nostri dati e può utilizzare un web
connettore di servizio in modo da sto andando utilizzerò
un’API da qualche altra parte o può essere
usato in persistenza locale qui o a
combinazione di entrambi o io posso essere usato a
Mash-up Posso usare un mash-up di molti
servizi web
questi astraggono l’informazione che
viene da lì diciamo che voglio
essere in grado di noleggiare una bicicletta se c’è
Sole in qualche posto, quindi non sto accedendo
un’API per il servizio di noleggio biciclette e
un altro per il servizio meteo così io
posso non sapere come sono questi mashup
informazioni e inviarlo all’utente in a
il modo che è utile a loro ok così che io
farà per testare la mia attività
la logica nonostante la persistenza è quella di
isolare questo interactor che farò
avendo protocolli che definiscono il
astrazioni di questi due strati e
questo è come è fatto questo è molto
facile interactor e questo è al fine di
presentare un elenco di oratori e cosa sono
avendo qui è il nome del
interactor con cui ha una relazione
il gateway dell’entità e ne ha un altro
relazione con il presentatore e come
puoi vedere qui ho solo un
inizializzatore che prenderà i dati
connessione al gateway entità e
questo è il metodo che si prende cura del mio
logica aziendale quello che faccio qui è il metodo
dice che cosa sta per fare è mostrare tutto il
altoparlanti e si ottiene la loro entità da
il gateway dell’entità recuperando i dati
da questo repository e poi da esso
converte questi dati in qualcosa che
può essere usato dal presentatore che
un’astrazione è un astratto è un valore
che sarà passato al presentatore
in ordine per ciascuno di modificare e dire
dice alla vista cosa deve fare molto
facile quindi come faccio a testarlo così bene
non c’è niente non tanto che devo
faccio qui posso creare un nuovo ricordo
repository che ha un oggetto e io posso
verificare se questo viene passato al
presentatore propriamente ho finto per
il presentatore e poi lo sarò
controllando se questi dati corrispondono a
dati che ho lì dentro in questo falso
deposito avviso qui che ignoro il
caso e questo sta usando una dichiarazione di guardia
ignora il caso in cui entrambe le liste
entrambi gli array non hanno lo stesso numero
di elementi perché non ha senso io
significa se ho tre altoparlanti che voglio
mostra tre oratori alla finale
presentatore molto facile da testare non ho bisogno
tutto ciò che riguarda i dati di base in ordine
o un servizio web è pazzesco scrivere a
unit test che parla di un servizio web
e ti fornisce i dati dal
servizio web in ed esercita quello
perché i ritardi dei servizi web
Probabilmente tutti voi hanno notato che
eseguire test a Swift almeno per me
ci vuole più tempo di quello che ha fatto per
obiettivo-c perché bene la compilazione
il processo è buono può essere meglio va bene allora
è anche vero che ci vuole un po ‘
Almeno per me, per avere questa corsa
nel simulatore o forse la mia macchina
sta invecchiando ma sono solo 1/2 anni
vecchio quindi non lo so, ma il fatto è
che questo non è il caso che vogliamo
avere qualcosa che va al
la rete porta i dati e noi ci esercitiamo
questi dati nell’applicazione
quindi quello che vogliamo avere è un
astrazione di questa informazione che può
essere alimentato in questo caso d’uso e che noi
può testare correttamente qui finalmente il
test dei tratti e non volevo
di avere un protocollo che non sei
familiare con così e non volevo
dedicare molto tempo a spiegare cosa
estensione del protocollo potrebbe essere così ho deciso
utilizzare quello che viene spiegato in
Il discorso del WWDC di quest’anno è il discorso
chiamato in pratica e permette
per avere elenchi per i segway
secondo te i controllori penso che sia un
bella idea e se vuoi una spiegazione
di come funziona questa stazione di protocollo
posso andare a vedere questo discorso che penso
è molto carino quindi
l’implementazione che ho qui è
direttamente da questo discorso ed è un
protocollo che definisce solo questo tipo
alias è un identificatore segue dire che è
deve essere reale rappresentabile che significa
che ha avuto in ogni caso un
riga caso un valore riga e questo a questi
sono i due metodi che stanno soffrendo
l’uno è al fine di eseguire un seguito
con un identificatore usando uno di questi
in alcuni casi e un altro qui è il
segue l’identificativo per questo caso successivo
questo valore enum che verrà utilizzato in
Per avere un interruttore che attraversa
i casi al posto delle corde della
identificatori quindi come fai a testare così bene
è abbastanza facile le cose che tu
Devo fare qui per avere una classe
usa quel codice e come lo fai
fai una finta che è la classe che tu
vuole
che implementerà quel protocollo qui
quindi qui questa è la classe di simulazione ed è
non solo ha implementato il controllo UAV che
era uno dei requisiti del
protocollo della stazione locale Suri
ma sta anche implementando questi
tensione dei protocolli che ho menzionato così
quello che ho qui sono questi due
identificatori per questi due segues
ovviamente quelli fittizi ma anche io
avere un metodo qui che è sovrascritto
e quello sarà quello che registra
la chiamata a questo esegue segue con
identificatore sai la differenza
tra falconi e stub è pugnalata
qualcosa che ti dice quello che vuoi
sentire e un finto è qualcosa che
ti dice cosa vuoi sentire e
registra ciò che hai detto va bene così questi questi
si chiamano baby cams negli Stati Uniti e in I
come quelli che hai in un orso
che hai una tata con i bambini
e vuoi vedere cosa sta facendo
con i bambini
quindi queste ragazze della tata sono più vicine alle derche
va bene così questo marchio qui sta registrando il
i parametri di quelli che sono stati utilizzati
con questa chiamata e ciò che facciamo è quindi
controllare se questi seguono con
identificatore invoca la versione classica
quindi parla con il metodo attuale e
se i parametri sono corretti
quelli in modo che usi questo il primo segue
identificatore nel primo caso e utilizza il
secondo nel secondo caso molto facile
poi ho testato il mio protocollo
estensione oltre a un intendo in malgrado
non è stato applicato fino a quando non ha una classe I.
non è necessario avere la classe effettiva
Voglio dire che non devo provarlo
stazione di protocollo per ogni classe che esso
viene applicato a I invece testare il
stazione protocollo da sola
così quel valore dei risultati di questi
i test possono essere applicati ad ogni altra vista
controller che applico a questo
particolare stazione troppo così mi permetta
riassumere e poi ne prenderò altrettanti
domande come desideri dopo tutto questo
prove di cui abbiamo parlato
la cosa che fai è che tu
migliorare continuamente la risorsa di
la tua applicazione eseguendo un nuovo test a
nuovo test che copre più casi di più
il tuo caso d’uso e che ti porta a
livello più alto e tutti questi test possono essere
applicato a questi una diversa parte di
l’architettura quindi se ne hai uno
architettura che è definita come quella
che ti ho mostrato e quello
differenzia e che isola ciascuno
parte dell’applicazione ciascuno
responsabilità della vostra applicazione è
più facile scrivere tutti quei test lasciami
mostrarti
perché a volte a differenza delle persone quando noi
fai qualcosa del genere
quindi questo è un controller di visualizzazione, sì una vista
controller e come puoi vedere qui
non so se puoi leggerlo
questi sono 92 test ok ma nota qui
che questi sono i test per il
AppDelegate
questi sono i test per la memoria
repository qui questo è un connettore I
non ha parlato di quelli qui, questo è
la stazione di protocollo che io
menzionato l’interactor e anche il
classi che uso per visualizzare il
dati quindi quando eseguo questo test, allora
ricevi un messaggio molto carino che dice test
successo che significa che ognuno di
i miei 92 test sono passati e questo
il controller di visualizzazione è completamente testato e
non credere alla mia parola che tu vada qui
oh sì un secondo
questo è per ottenere la copertura ci andare
dati e devo eseguire nuovamente il test
e per questo pezzo di codice che sono
mostrandoti
questa è la copertura Oh, la mia classe va bene così
beh, non male, puoi fare prove complete di
i tuoi controller di visualizzazione puoi testare completamente
la tua persistenza puoi testare completamente il tuo
la logica di business va bene, quindi lasciami tornare
la presentazione
grazie mille sì mi piacerebbe
ricevere domande e cercherò di rispondere
loro come meglio posso in ogni caso se tu
voglio fare qualsiasi tweet dopo per favore
includi questo hashtag così posso cercarlo
e prova a rispondere se pensi di a
domanda
dopo la sessione e per favore si prega di fare votare
questa sessione mi piacerebbe sapere cosa
si pensa a quello che ho detto vi ringrazio
tu bene non intendo davvero come il
pensieri su BDD BDD iniziamo con
che lo sviluppo guidato dal comportamento di BD DS
e uno degli obiettivi di BDD è quello di essere
in grado di esprimere come l’applicazione
dovrebbe comportarsi in termini di qualcosa che
può essere scritto la maggior parte delle volte in a
modo che anche l’utente può esprimere
chiaramente la maggior parte delle volte non penso
funziona davvero da qualche parte come questi
le lingue specifiche del dominio non sono realmente
così espressivo per gli utenti comuni
alla fine finiamo di fare qualcosa che è
come va bene , sai che a cosa serve
di uno così si fa a tradurre a questa
lingua e poi usiamo che
informazioni in un modo che può essere usato come
la definizione del test non ha nulla di sbagliato
con quello ma non lo penso
aiuta molto se vuoi farlo
testando intendo come se fossi tutto a posto io
significa che se lo avessimo fatto, la tua cosa sarebbe andata per quello
non ho nulla contro BDD quello che sono
solo dicendo è che non lo penso
l’utente comune che gli uomini d’affari possono
usa questi linguaggi per esprimere ciò che il
applicazione deve fare
altre domande stai testando come
che ottieni il 100% di copertura no
chi ami, davvero lo farai
prova chi viene al workshop in
Tasso di oggi va bene così non ci saremo
provando a fare TDD e ci proveremo
per fare questo miglioramento del del
architettura per averli
i test scorrono se ne hai
qualcosa è la prima cosa che sei tu
in realtà è possibile testare i dati decorativi in pila
se si desidera che ho fatto questo per
un po ‘di tempo e penso che sia perfettamente
fattibile e ciò che in realtà non lo fai
deve fare è testare i dati stessi I
significa come non penso sia una buona idea
per testare che possono prendere il
i contenuti del database sono ciò che tu
si aspettano che non è una buona idea per fare
la raccolta dei dati basata su detto questo
hai creato e si controlla che il
fetch è fatto correttamente perché, come ho detto
all’inizio questo è il codice di Apple
e dovresti testare il codice delle mele
cosa che potresti fare invece è essere
in grado di creare un po ‘di memoria persistente
negozio che è molto facile da fare e che cosa
tu fai poi ti passi e lo crei
impilare come falso uno stack che tu
usi per i test e poi ognuno
verrà eseguita la sottoclasse di un oggetto gestito
all’interno di questo nuovo stack questo nuovo stack
sarà memoria qualsiasi persistere
e lo store condividerà la mamma
Non ricordo il significato del
indica il modello dell’oggetto gestito
grazie quindi il modello oggetto gestito
sarà condiviso da entrambi gli stack il solo
differenza l’unica differenza effettiva
sarà quello per quello vero lo farai
essere persistenti i dati in un file o in
molti mentre nei dati che usi per
testare i dati non sarà
persistente perché verrà creato in
memoria la mia raccomandazione è che tu
crea questo stack per ciascuno dei test
quindi quando fai il setup e il
smontaggio del tuo caso di test che crei a
impilare , esegui il test e distruggi
lo stack e di nuovo sembra molto
di lavoro probabilmente ci vuole più tempo
di sì una variabile ma dal momento che è
accadendo nella memoria è molto veloce così io
hanno un sacco di test in esecuzione dati principali
e non penso che sia un problema per te
può davvero eseguirli correttamente ma questo
quello che stavo dicendo è che questi
dovrà avvenire presso la persistenza
strato mentre questo è completamente non correlato
a cosa succede nella logica aziendale
e completamente estraneo a ciò che accade
alla persistenza e alla presentazione
logica puoi essere in grado di testare
ognuno di questi strati separatamente
requisiti per scrivere una buona pulizia
l’architettura è quella degli strati che tu
l’uso ha una dipendenza che può solo andare
verso l’interno così nello strato esterno di
il vostro un codice che avete cose che si possono
essere disposti a cambiare in futuro come
per esempio l’interfaccia utente o il database se
diciamo che ora vuoi cambiare
dai dati di base
– vero o il contrario o tu
voglio usare la polizia perché tu hai
capito che non ti serve così tanto
potere lì accade la stessa cosa con il
UI e probabilmente dici che sto usando
l’interfaccia utente quella che mi fornisce Apple
con per il cellulare sì e ora
vuoi rivolgerti ad Apple TV e ora
vuoi indirizzare il sistema operativo dell’orologio, quindi se
hai le tue opinioni completamente separate
dalla tua logica aziendale questo sta andando
essere molto più facile, molto bene
perché il tuo livello di vista può essere anche a
diverso per ognuno dei tuoi obiettivi
quindi i tuoi obiettivi useranno a
vista diversa a seconda che tu
stanno rivolgendo gli Osservatori o la Mela
TV o il telefono cellulare sono tutto messo a posto
così hai risolto la vecchia domanda così
grazie mille mi sento libero di chiamare
io qualsiasi pasticcio
tu
ogni tanto mi stupisce sempre come
riluttante è il nostro personale a fare test
per il codice che scrivono e io no
sai perché scrivono il codice e solo loro
provato con i loro dispositivi e inviarlo a
il cliente e chiedere al cliente di provare
il loro codice è come chiedere al cliente
vai tu per primo
ti prendi cura di questo dimmi come
funziona e se funziona bene e io solo
voglio sapere se c’è qualche problema
probabilmente qualcuno di voi starà pensando
che non è così importante da fare
test per piccole cose per piccole applicazioni
perché dopo tutto quello che stiamo facendo è
solo app per dispositivi mobili che sono
non quel bene importante in realtà loro
sono ma anche le cose più piccole che noi
usato richiede alcuni test a volte noi
voglio essere sicuro che queste piccole cose
funziona perfettamente prima di usarli anche
ci consideriamo professionisti a
almeno questo è quello che voglio pensare
me stesso e se siamo professionisti noi
vorrei confrontarci con
aziende come la NASA come la
presentazione che abbiamo avuto oggi per il
keynote voglio dire come fanno un sacco di
test sono stati in grado di mettere questo a
rapina Marte così precisamente perché loro
stavano facendo molti test prima di loro
stavano facendo test di unità che non erano
facendo il test di integrazione perché come
lei ci ha spiegato che non è possibile
per testare tutto prima di inviare il
roba su Marte ma almeno lo erano
cercando di mettere insieme tutti i pezzi
averli pronti e testati prima
mandandoli su Marte perché è così
costoso è anche costoso per il nostro
aziende per creare software e inviare
li ai clienti senza aver provato
che da qualche parte prima, quindi, vorrei chiederti
non considerarti un artista o
un giardiniere che non può testare i risultati
del loro risultato ma considerare alcuni a
considerati un professionista e prova
per dimostrare che quello che stai facendo è
completamente giusto così oggi ho intenzione di
parlarti di TDD e come fare TDD
controllando le dipendenze e bene come
Ho detto che il mio nome è Kirk i tuoi denti e
questo sarà, parlo di come
l’architettura ci ha aiutato a fare TDD lo faremo
parlare di TDD prima di come è la vita reale
entra in TDD e rovina i risultati di
la nostra buona volontà e poi quanto mi ha aiutato
noi per avere un orso un’architettura che
può essere completamente testato e ci ha aiutato a fare
TDD quando stiamo sviluppando per mobile
dispositivi e per OS 10 quindi iniziamo
con TDD e perché non voglio esserlo
una di queste persone che inizia a parlare
sugli acronimi senza spiegare cosa
TDD è lo so che probabilmente tutti
qui sa cos’è il TDD ma lasciami dire
lascia che ti ricordi che TDD è
sviluppo guidato da test e questi
lo sviluppo basato sui test significa che noi
scrivere le prove prima di fare qualsiasi reale
codifica che significa che sappiamo ciò che noi
voglio provare prima di scrivere un codice e
beh questo è molto importante perché ora
stiamo cambiando il paradigma e lo faremo
invece di scrivere il codice e provare
per dimostrare che funziona perfettamente
quello che facciamo invece è creare quello
che sappiamo che questo codice dovrà
passare e poi scriveremo un codice in
Per farlo funzionare non so come
a lungo in cui tutti voi avete lavorato
sviluppo probabilmente molti anni per noi
ci sono stati molti progressi e noi
iniziato con questa sensazione di scrittura
qualcosa e digitando qualcosa su a
tastiera e scrivi in un piccolo programma
e fa qualcosa di buono che è gentile
di progresso ma poi ci piacerebbe cambiare
lo stadio di essere in grado di fare ciò che noi
volevo che i nostri programmi non fossero solo
fare qualcosa ma noi ci aspettavamo
loro per fare il prossimo passo da quello
test posso dimostrare che il programma
fa quello che voglio che faccia ma c’è
ancora di più puoi andare a fare TDD e poi
puoi dire che dirò di cosa si tratta
ottenere param sta per fare e lo farà
dimostrare che lo farà
perché sta passando le prove questo è
il sentiero per il Nirvana va bene così una volta
sono passati attraverso tutti questi passaggi si
arrivare al palco dove sai che il tuo
il codice sta facendo tutto ciò che eri
pianificando perché sta passando tutto il
prova che hai in programma in anticipo come
lo fai come scrivi?
test per farli passare e a
Coprire completamente la portata del tuo
applicazione bene la prima cosa che
devi tenere a mente sei tu
solo per testare il tuo codice e questo è
qualcosa di molto importante se lo sei
scrivere un dato fondamentale
applicazione probabilmente non vuoi volontà
probabilmente sai sicuramente che non vuoi
verifica che una richiesta di recupero esegua quella
è il codice che Apple ha scritto per noi è
lavorando correttamente non lo vuoi
è mele affari funzionerà bene voi
voglio solo scrivere un test del genere se
vuoi dimostrare che stanno facendo
qualcosa non va bene, ma non è così
di solito il caso di solito quando trovi un
borsa come 99 per cento su 100 è
colpa tua supponiamo che va bene così
qui quello che vuoi fare è solo test
il codice che stai per scrivere
solo un livello di astrazione che
significa che mi concentrerò sulla parte superiore
API il livello di API che sto servendo
ad altri moduli quindi se questa è una classe
c’è un’interfaccia pubblica che è
offrendo metodi ad altre classi e
questo sta per questi sono i metodi
che ho intenzione di provare i metodi che
Svilupperò test solo per il
i metodi pubblici di solito la gente pensa oh
questo metodo è molto importante
voglio sapere che funziona correttamente ma
questo è privato, quindi come faccio a provare che il
cosa che devi fare è provare il
metodo pubblico che usa quello
quindi eserciti quel metodo il privato
uno ma devi solo concentrarti su
testare quelli pubblici se un metodo è
privato e non hai accesso a te
non ho accesso a ciò che fa
non ha senso, non ha senso averlo a
trucco che i test in esecuzione per voi ancora
non ha senso avere il privato a
metodo in modo che solo i metodi pubblici uno
asserzione per test bene che non lo è
in realtà la vera asserzione è ciò che tu
sospetto che il test da fare
a volte puoi averne più di uno ma
la cosa che devi tenere a mente
è che se fallisce un test fallisce deve
fallire a causa di indovinare una ragione per cui tu
hai bisogno di un test
un difetto che te lo dice
c’è qualcosa di sbagliato ma indovina una cosa
perché se un test sta fallendo e lo è
offrendoti un sacco di cose che può
andare male, allora è più difficile per te
scoprire qual è stato il problema nel
il primo posto alla fine deve essere il test
indipendente dalla sequenza e uno stato se
corri i test in un ordine diverso
o se il test la X la classe che
stai esercitando la lezione che sei
test ha qualche stato precedente si vuole
devo iniettare quello stato nel test
che deve essere eseguito non come risultato di
test precedenti ok questi sono generali
regole penso che siano abbastanza facili
rispettare ma poi avvia il TDD
la danza e la danza TDV è ciò che fai
quando vuoi sviluppare TDD in TDD tu
inizia scrivendo come ho detto i test così
quando scrivi un test hai qualcosa
che bene fallisce
Voglio dire, è letto allora il test a
il codice è scritto per superare il test e
allora spero che tu abbia qualcosa che è
verde è passato il test allora hai
la possibilità di migliorare il tuo codice che puoi
refactoring e refactor spiacente e refactoring
significa che il refactor della speranza significa che il
il codice farà lo stesso e tutti
i test dovrebbero essere ancora in corso ma
puoi fare cambiamenti al tuo codice che sono
richiesto che aiuti la leggibilità di
il tuo codice che aiuta il codice ad essere di più
concisi che tutto ciò che soddisfa
il tuo scopo e puoi refactoring in
per avere un metodo che eviti
ripetizioni cose del genere ma ogni
il test deve ancora passare dopo
lo stadio di refactoring quali sono i
processo di fare TDD bene il processore
il primo Pro è che avrai il codice
che è coperto al 100% il che significa che
hai codice mi spiace per i test
ogni riga del tuo codice se non ottieni
che quando stai facendo TDD è perché
stai tradendo te stesso
dicendo bene, non ho bisogno di testarlo
allora non è coperto ma se lo fai
TDD correttamente e tu ti trattieni
te stesso da scrivere qualsiasi riga di codice
prima di avere un test per che tutto
sarà coperto perché stai pensando
riguardo ai test sei più sensibile
ai casi limite sei anche di più
sensibile alle cose che non eri
pianificare in anticipo quindi quello che hai è
la capacità di rilevare scenari che se
non fai il test prima di te
non noterei i progressi che fai
quando fai le vite, può esserlo
misurato intendo come tu lo sai
stai facendo dei progressi perché tu
avere più test che stanno superando ogni
tempo che stai scrivendo ed è
più facile introdurre cambiamenti perché quando
tu introduci un cambiamento che conosci
immediatamente come influisce sul resto
del tuo codice di cui alcune persone si lamentano
quanto tempo ci vuole per scrivere i test e
Sono d’accordo che ci vuole del tempo per farlo
testare correttamente ma è anche vero
che dal momento che stai facendo il test
in anticipo il tempo che trascorri sul
il bagging è meno e questo ti aiuta
la tua produttività è anche quella
sei in grado di ottenere un maggiore disaccoppiamento
codificare le dipendenze esplicite singole
responsabilità all’interno delle classi
può fare il parametro autopilota
è essenziale per le persone che non lo fanno
dormo molto intendo che tu sai che il codice
sta funzionando correttamente perché lo sei
scrivere un test e sta passando il
prova ok anche tu puoi arrivare ad un semplice
design perché una delle cose che
tu provi a fare quando stai facendo test
è quello che viene chiamato Jack Knee non lo è
ne avrò bisogno
non metti le cose nel tuo programma
che non sono richiesti ancora così qualunque cosa
scrivi nel tuo programma è qualcosa
ciò è richiesto istantaneamente e questo è
perché lo provi la verità è che il
le cose dalla parte giusta non lo sono
in realtà è vero sempre ma sono vere
il più delle volte e loro almeno loro
aiutarvi ad avere un modo per renderli più facili
ok, quali sono i lati positivi degli svantaggi
le persone non inizierebbero a pensare
su TDD la prima volta che lo dici
la gente del nostro TDD pensa che sia così
mettere il cavallo prima di un carrello
e ora devo pensare a provare
qualcosa che non ho nemmeno scritto
eppure così bene che in realtà non è vero
perché quando vuoi andare a
ristorante e vuoi ordinarti
non so come il cibo sta per essere
o come ti sentirai un pazzo
dopo aver mangiato il cibo così si passa attraverso
il menu e chiedete alcuni piatti e
li mangi e speriamo che superino il
prova okay
altre lamentele sono che ci vuole
più a lungo ma come ho detto prima ci vuole
più inizialmente, ma non è vero
ci vuole più tempo tutto il tempo perché tu
prendere in considerazione il tempo che
non spendi nel debugger quale io
non so voi ma per me spendere
il tempo nel divisore è stancante perché
bene intendo come a volte questo corro
anche in questo caso il problema è lì ma
Non so come risolverlo, quindi ci provo
ancora e ancora e ancora non capisco
per risolvere il problema bene quando sono
scrivendo il test so perché non lo è
passando ok c’è una iniziale
investimento sono d’accordo su quello che penso
devi fare più cose per ottenere una base
caso in esecuzione, ma va bene paga
in seguito e penso che valga la pena
spendendo quel tempo alcune persone e lì
è stata una serie molto bella di video in
YouTube con David Hannah Mayer e
Cartella Martin e tornò e che il
titolo è è TDD morto ed è molto
bella serie e uno dei punti era se
Sto facendo TDD
Non ho una mente big-picture così
il mio progetto non è così buona come sarebbe
se passo un po ‘di tempo a lavorare su
progettare e poi fare lo sviluppo
ma la verità è che non c’è nulla in
TDD che ti dice di non lavorare nel
disegnami per iniziare con TDD quindi io
non pensare che sia un problema o lo è
vero è proprio vero che se il
i requisiti cambiano devono essere i test
leggendo non solo il codice ma il
test e questo richiede più tempo anche lo è
vero che hai bisogno di più test quell’unità
prova fino a quando si tratta solo di test unitari
e ce n’è probabilmente di cui avrai bisogno
test di integrazione avrete bisogno di un qualsiasi
un altro tipo di test come caricare in basso come
test delle prestazioni e qui sei solo
una messa a fuoco sul test dell’unità ma
non è male per TDD, voglio dire che è così
qualcosa che si dovrà fare
comunque alla fine la gente dice bene se io
scrivere TDD il mio codice sarà migliore
bene il vostro codice sta per essere buono come
il tuo test intendo se tu
codice corretto che non è leggibile e tuo
il codice è negativo per il TD dei tuoi test TDD
sta per essere cattivo che non sta andando
per cambiare quanto è buono il tuo codice
quindi il mio punto è che se fai TDD e
vuoi e sviluppare questi
le applicazioni che si sta lavorando in su
in futuro, in modo TDD si vuole
ottenere un risultato finale migliorando
continuamente il codice che scrivi
mentre fai i test ok, ma
andiamo nella vita reale probabilmente alcuni di
voi se non quanti di voi hanno provato
TDD almeno una volta
bene, va bene, quindi quanti di voi fanno TDD
il più delle volte va bene così che cosa sono
dicendo che sì, ci proviamo ci piace
sta per essere la mia prossima vacanza siamo
partendo da zero ho intenzione di scrivere
la prossima lezione e ho intenzione di scriverlo
usando TDD ma che la vita entra nel
al centro di quello e volevi fare il
prova ma qualcuno ti sta chiedendo di avere
la classe pronto avete una scadenza che
non passa il primo test che tu non fai
sai perché, ma non sta funzionando così bene
ok , dimentichiamoci di TDD e facciamolo
come abbiamo fatto prima buona parte del
le cose che sono più difficili da testare sono le
Interfaccia utente la parte visiva della tua applicazione
e le persone a volte iniziano a provare a farlo
il test dell’interfaccia utente e bene pensiamo
vivere questo è troppo difficile come faccio a emulare
i tocchi come faccio a sapere il
le informazioni che è necessario per essere
testare loro faccio testare se il colore
è che o non faccio testare il font do I
prova la dimensione della vista cosa fare
Devo testare lì discuteremo a
un po ‘su questo in un momento
un’altra cosa che potrebbe essere difficile da fare
il test è la persistenza
almeno la nostra relazione con la persistenza
la maggior parte delle nostre applicazioni ne sta usando alcuni
tipo di dati è un dato di fatto ma poi in
per provare la tua logica aziendale
è necessario disporre di alcuni set di dati che si desidera
di sapere che questi dati sta per essere
disponibile e che i dati soddisfano il
requisito di testare quella parte del
logica e poi si inizia ad avere piccoli
set di dati e quindi si inizia ad avere
bene cosa devo fare lascio i dati
lì ho due pezzi di dati
uno per la produzione e quello che io
che sto usando per testare mmm
quindi parleremo un po ‘di
come risolverlo finalmente e questo è
questo è per le persone che hanno lavorato
con Swift o con altre lingue come
molti di voi hanno usato anche Swift
Almeno per divertimento oh ok quanti di voi
ho usato le estensioni del protocollo molto bene
quindi le estensioni di protocollo sono in Scala loro
sono chiamati tratti per quelli di voi che
hanno provato anche Scala e forniscono
le classi con ulteriori
funzionalità che può essere complementare
a quello che hai da
eredità abbiamo pensato di avere tutto il
cosa che ottieni dall’eredità così
è un vantaggio che fornisce con a
modello di design pulito e pulito per alcuni
roba e lui evita di più
dei problemi di ereditarietà multipli
che hai in altre lingue così
i commerci sono molto interessanti, il problema è questo
le negoziazioni sono un’estensione del protocollo e a
protocollo come già sapete è
qualcosa che non ha un’istanza
è questo sì una dichiarazione di intenzioni
lo dici usando un protocollo di metodi
ti stai impegnando per un attrezzo ma
non hai alcun codice per quelli
metodi ancora quando aggiungi un protocollo
estensione per quelli che stai dicendo bene
questa è un’implementazione generica e io sono
sarà in grado di utilizzare questo generico
implementazione per queste classi voi
avere restrizioni per applicare il
protocollo ma questo codice non sta per
avere qualsiasi istanza a meno che non si applica questo
protocollo a una classe reale, quindi come fare
prova qualcosa che non ne ha
esempio di chi parlerà anche di
questo quindi parliamo di TDD e
rapido e ho messo un piccolo – non c’è
significa che quello che sto dicendo è
non Swift square Swift – quindi parliamo
su come fare il test dell’interfaccia utente così
beh probabilmente tutti voi sapete che Xcode
ti stava offrendo la possibilità di scrivere a
test di unità così dispiaciuto non test unitario
Test dell’interfaccia utente Credo che sia stato segnato cinque
qualcuno può correggermi su quello che eri
usando javascript ora puoi usare Swift
da Xcode 7 su e bene questo non lo è
unità di test questo è test di integrazione
perché quello che stai facendo in realtà è
stai eseguendo l’intera applicazione e
stai provando a premere quel pulsante per leggere
quell’etichetta o scorrere su quella cella
questo è completamente diverso dall’unità
testare questo non è sbagliato non sto dicendo
che questo non può essere buono per il tuo
applicazione sto solo dicendo che questo è
non test unitari e questo non aiuta
noi di fare TDD Va bene così abbiamo la stessa
problema con altri quadri per
test che diamo per zucca o cetriolo
il nostro test di integrazione così da quando TDD è
sui test unitari sull’isolamento di
il nostro modulo e test che modellano il
modulo isolato come lavoriamo con quello
bene se usiamo un’architettura che
disaccoppia tutta la nostra logica, allora è così
più facile per noi essere in grado di lavorare con
la vista in modo separato quindi la vista
sarà per lo più passivo passivo
e accetterà solo un
comandi dal resto della nostra logica e
fornire al presentatore gli eventi
quello accade alla vista e bene alcuni di
potresti star pensando bene un altro
architettura bene questo non è mio
architettura questa non è la mia idea ma
questa è l’idea che viene dallo zio
Anche l’ architettura di pulizia di Bob è così
un miglioramento su altre architetture
come l ‘architettura della cipolla o il
esagonale così che tutti questi intelligenti
le persone hanno pensato bene
dobbiamo davvero concentrarci sull’avere single
responsabilità e avere single
responsabilità e un buon modo per
comunicare le cose è inizialmente difficile
ma se lo fai correttamente è molto
più facile da testare e
se hai questa visione completamente
isolato e senza alcuna logica in esso
è molto più facile da testare che non voglio
tu per prendere la mia parola per questo voglio
vi mostrerà un certo codice di come fare in modo che
questo è come dire che la tua cella di tabella è un
sottoclasse di una cella di tabella UI che puoi
guarda qui e questo è in realtà un vero e proprio
quindi è quello che sarò
mostrando al workshop in due giorni e
come puoi vedere qui ne hai tre
sbocchi e le tre prese sono per
ciascuna delle tre etichette che sono
sarà presentato in questa tabella
cell ho tre metodi e questi
tre metodi sono implementati qui e
sono dichiarate in questo protocollo che
è il protocollo che verrà utilizzato
dal presentatore quindi questi metodi sono in
per cambiare questi tre campi il
nominare il titolo e la data e l’avviso
qualcosa che è molto importante qui
la data in cui potrei passare uno stato interiore per
esempio che è l’ oggetto che
fornisce una data all’interno di Coco ma non lo sono
facendo ciò perché non voglio il mio
viewcontroller il mio punto di vista per essere intelligente
abbastanza per tradurre la data in
qualcosa che può essere usato in una vista I
vuole solo la vista per visualizzare il testo o
colori o cose che sono fatte abbastanza
va bene così quando ho questo è molto
più facile testare che non so come
bene questo legge da dietro ma lasciami
ti aiuto con questo ho un metodo qui
c’è quello che sta effettivamente facendo il
test e quello che faccio è creare un
etichetta che si basa su questo finto che io
ho scritto questo è Swift
lo sai che Swift è
non buono come obiettivo-c in termini di a
spedizione dinamica in così tutti i
librerie di derisione che deridono le strutture
che eravamo abituati e che amavamo prima
non possono essere usati in Swift ma
non è un grosso problema perché possiamo
scrivi i nostri mock nei nostri casi di test
e questo è quello che sto facendo qui io sono
creando un’etichetta derisione che è a
sottoclasse di UI label I’m over ray
sovrascrivere la proprietà text che è il
uno che viene visualizzato quando si dispone di un a
etichetta e qui quello che sto dicendo è bene
se questa proprietà ha detto dopo che è stata
ho detto che voglio mettere questa bandiera a due a
vero quello che sto dicendo è che voglio
per sapere se questa proprietà è stata utilizzata
è stato impostato bene, quindi è molto facile
qui quello che faccio è ok voglio usare
questa etichetta deride come l’avviso dell’etichetta della data
questo è questo è quello che ero
menzionando che non ha intelligenza
di fornire qualsiasi formattazione del della
data ma mostra solo il testo
hai fornito ciò che faccio qui sono io
esercizio uso il metodo che voglio
test che è la data di visualizzazione inviata
e io uso questi che è una costante
Ho definito prima qui poi ho
arriva a controllare se l’etichetta è stata
usato questo il testo è stato impostato e bene
il valore è quello corretto il gioco è fatto
molto facile da testare e funziona non solo
con queste cellule ma con una vista
controller il controller di visualizzazione tabella può
essere testato è hey questo e l’unico
requisiti che definisci il corretto
protocolli per astrarre il
comunicazioni tra i diversi
classi
la persistenza stessa cosa qui intendo
come se fosse un requisito per le cose
che dobbiamo fare per avere la costanza di
avere gli oggetti adatti disponibili per noi
lì ma ma non abbiamo davvero bisogno del
oggetti da perseguire per essere
in grado di testarlo, quindi quello che vogliamo è
fornire una classe astratta un protocollo
che ci fornirà i dati che
abbiamo bisogno in quel momento per quello
prova quindi questo è un po ‘di più
versione elaborata dell’architettura
che ti mostro prima che questa fosse la vista
che stavo dicendo che non è solo
la vista ma anche il controller della vista
questa è la responsabilità del presentatore
del presentatore come ho detto sta ascoltando
agli eventi che vengono dalla vista
e facendo tutte le logiche di presentazione come
il nome implica la logica di presentazione
può essere qualcosa come la data è
formattato come per gli europei o per
Americani che è diverso o può
essere anche qualcosa come la data è
formattato in modo relativo in modo relativo
ad esempio se usi Twitter
uso dell’applicazione a volte chi preferisce
avere la data rappresentata come 30 secondi
fa o due giorni fa invece che a quello
momento in tempo preferisco sapere
da quanto tempo è passato da questo tweet
di avere qualcosa che mi viene presentato come
la data e l’ ora effettive per quello
evento quindi qui hai una presentazione
la logica è possibile modificare tale comportamento e
questa logica accadrà qui nel
presentatore dell’interattore l’interactor
è la logica della logica aziendale del nostro
applicazione questo è dove il caso d’uso
le liste delle storie d’uso accadono e questo
interactor a è agnostico del
persistenza che usiamo e il
presentazione che ci accingiamo a fare
con esso quindi si prende solo cura del
logica aziendale di ciò che vogliamo fare
allora abbiamo questo modello di repository
questa è una classe che ostacola l’accesso
i nostri dati e può utilizzare un web
connettore di servizio in modo da sto andando utilizzerò
un’API da qualche altra parte o può essere
usato in persistenza locale qui o a
combinazione di entrambi o io posso essere usato a
Mash-up Posso usare un mash-up di molti
servizi web
questi astraggono l’informazione che
viene da lì diciamo che voglio
essere in grado di noleggiare una bicicletta se c’è
Sole in qualche posto, quindi non sto accedendo
un’API per il servizio di noleggio biciclette e
un altro per il servizio meteo così io
posso non sapere come sono questi mashup
informazioni e inviarlo all’utente in a
il modo che è utile a loro ok così che io
farà per testare la mia attività
la logica nonostante la persistenza è quella di
isolare questo interactor che farò
avendo protocolli che definiscono il
astrazioni di questi due strati e
questo è come è fatto questo è molto
facile interactor e questo è al fine di
presentare un elenco di oratori e cosa sono
avendo qui è il nome del
interactor con cui ha una relazione
il gateway dell’entità e ne ha un altro
relazione con il presentatore e come
puoi vedere qui ho solo un
inizializzatore che prenderà i dati
connessione al gateway entità e
questo è il metodo che si prende cura del mio
logica aziendale quello che faccio qui è il metodo
dice che cosa sta per fare è mostrare tutto il
altoparlanti e si ottiene la loro entità da
il gateway dell’entità recuperando i dati
da questo repository e poi da esso
converte questi dati in qualcosa che
può essere usato dal presentatore che
un’astrazione è un astratto è un valore
che sarà passato al presentatore
in ordine per ciascuno di modificare e dire
dice alla vista cosa deve fare molto
facile quindi come faccio a testarlo così bene
non c’è niente non tanto che devo
faccio qui posso creare un nuovo ricordo
repository che ha un oggetto e io posso
verificare se questo viene passato al
presentatore propriamente ho finto per
il presentatore e poi lo sarò
controllando se questi dati corrispondono a
dati che ho lì dentro in questo falso
deposito avviso qui che ignoro il
caso e questo sta usando una dichiarazione di guardia
ignora il caso in cui entrambe le liste
entrambi gli array non hanno lo stesso numero
di elementi perché non ha senso io
significa se ho tre altoparlanti che voglio
mostra tre oratori alla finale
presentatore molto facile da testare non ho bisogno
tutto ciò che riguarda i dati di base in ordine
o un servizio web è pazzesco scrivere a
unit test che parla di un servizio web
e ti fornisce i dati dal
servizio web in ed esercita quello
perché i ritardi dei servizi web
Probabilmente tutti voi hanno notato che
eseguire test a Swift almeno per me
ci vuole più tempo di quello che ha fatto per
obiettivo-c perché bene la compilazione
il processo è buono può essere meglio va bene allora
è anche vero che ci vuole un po ‘
Almeno per me, per avere questa corsa
nel simulatore o forse la mia macchina
sta invecchiando ma sono solo 1/2 anni
vecchio quindi non lo so, ma il fatto è
che questo non è il caso che vogliamo
avere qualcosa che va al
la rete porta i dati e noi ci esercitiamo
questi dati nell’applicazione
quindi quello che vogliamo avere è un
astrazione di questa informazione che può
essere alimentato in questo caso d’uso e che noi
può testare correttamente qui finalmente il
test dei tratti e non volevo
di avere un protocollo che non sei
familiare con così e non volevo
dedicare molto tempo a spiegare cosa
estensione del protocollo potrebbe essere così ho deciso
utilizzare quello che viene spiegato in
Il discorso del WWDC di quest’anno è il discorso
chiamato in pratica e permette
per avere elenchi per i segway
secondo te i controllori penso che sia un
bella idea e se vuoi una spiegazione
di come funziona questa stazione di protocollo
posso andare a vedere questo discorso che penso
è molto carino quindi
l’implementazione che ho qui è
direttamente da questo discorso ed è un
protocollo che definisce solo questo tipo
alias è un identificatore segue dire che è
deve essere reale rappresentabile che significa
che ha avuto in ogni caso un
riga caso un valore riga e questo a questi
sono i due metodi che stanno soffrendo
l’uno è al fine di eseguire un seguito
con un identificatore usando uno di questi
in alcuni casi e un altro qui è il
segue l’identificativo per questo caso successivo
questo valore enum che verrà utilizzato in
Per avere un interruttore che attraversa
i casi al posto delle corde della
identificatori quindi come fai a testare così bene
è abbastanza facile le cose che tu
Devo fare qui per avere una classe
usa quel codice e come lo fai
fai una finta che è la classe che tu
vuole
che implementerà quel protocollo qui
quindi qui questa è la classe di simulazione ed è
non solo ha implementato il controllo UAV che
era uno dei requisiti del
protocollo della stazione locale Suri
ma sta anche implementando questi
tensione dei protocolli che ho menzionato così
quello che ho qui sono questi due
identificatori per questi due segues
ovviamente quelli fittizi ma anche io
avere un metodo qui che è sovrascritto
e quello sarà quello che registra
la chiamata a questo esegue segue con
identificatore sai la differenza
tra falconi e stub è pugnalata
qualcosa che ti dice quello che vuoi
sentire e un finto è qualcosa che
ti dice cosa vuoi sentire e
registra ciò che hai detto va bene così questi questi
si chiamano baby cams negli Stati Uniti e in I
come quelli che hai in un orso
che hai una tata con i bambini
e vuoi vedere cosa sta facendo
con i bambini
quindi queste ragazze della tata sono più vicine alle derche
va bene così questo marchio qui sta registrando il
i parametri di quelli che sono stati utilizzati
con questa chiamata e ciò che facciamo è quindi
controllare se questi seguono con
identificatore invoca la versione classica
quindi parla con il metodo attuale e
se i parametri sono corretti
quelli in modo che usi questo il primo segue
identificatore nel primo caso e utilizza il
secondo nel secondo caso molto facile
poi ho testato il mio protocollo
estensione oltre a un intendo in malgrado
non è stato applicato fino a quando non ha una classe I.
non è necessario avere la classe effettiva
Voglio dire che non devo provarlo
stazione di protocollo per ogni classe che esso
viene applicato a I invece testare il
stazione protocollo da sola
così quel valore dei risultati di questi
i test possono essere applicati ad ogni altra vista
controller che applico a questo
particolare stazione troppo così mi permetta
riassumere e poi ne prenderò altrettanti
domande come desideri dopo tutto questo
prove di cui abbiamo parlato
la cosa che fai è che tu
migliorare continuamente la risorsa di
la tua applicazione eseguendo un nuovo test a
nuovo test che copre più casi di più
il tuo caso d’uso e che ti porta a
livello più alto e tutti questi test possono essere
applicato a questi una diversa parte di
l’architettura quindi se ne hai uno
architettura che è definita come quella
che ti ho mostrato e quello
differenzia e che isola ciascuno
parte dell’applicazione ciascuno
responsabilità della vostra applicazione è
più facile scrivere tutti quei test lasciami
mostrarti
perché a volte a differenza delle persone quando noi
fai qualcosa del genere
quindi questo è un controller di visualizzazione, sì una vista
controller e come puoi vedere qui
non so se puoi leggerlo
questi sono 92 test ok ma nota qui
che questi sono i test per il
AppDelegate
questi sono i test per la memoria
repository qui questo è un connettore I
non ha parlato di quelli qui, questo è
la stazione di protocollo che io
menzionato l’interactor e anche il
classi che uso per visualizzare il
dati quindi quando eseguo questo test, allora
ricevi un messaggio molto carino che dice test
successo che significa che ognuno di
i miei 92 test sono passati e questo
il controller di visualizzazione è completamente testato e
non credere alla mia parola che tu vada qui
oh sì un secondo
questo è per ottenere la copertura ci andare
dati e devo eseguire nuovamente il test
e per questo pezzo di codice che sono
mostrandoti
questa è la copertura Oh, la mia classe va bene così
beh, non male, puoi fare prove complete di
i tuoi controller di visualizzazione puoi testare completamente
la tua persistenza puoi testare completamente il tuo
la logica di business va bene, quindi lasciami tornare
la presentazione
grazie mille sì mi piacerebbe
ricevere domande e cercherò di rispondere
loro come meglio posso in ogni caso se tu
voglio fare qualsiasi tweet dopo per favore
includi questo hashtag così posso cercarlo
e prova a rispondere se pensi di a
domanda
dopo la sessione e per favore si prega di fare votare
questa sessione mi piacerebbe sapere cosa
si pensa a quello che ho detto vi ringrazio
tu bene non intendo davvero come il
pensieri su BDD BDD iniziamo con
che lo sviluppo guidato dal comportamento di BD DS
e uno degli obiettivi di BDD è quello di essere
in grado di esprimere come l’applicazione
dovrebbe comportarsi in termini di qualcosa che
può essere scritto la maggior parte delle volte in a
modo che anche l’utente può esprimere
chiaramente la maggior parte delle volte non penso
funziona davvero da qualche parte come questi
le lingue specifiche del dominio non sono realmente
così espressivo per gli utenti comuni
alla fine finiamo di fare qualcosa che è
come va bene , sai che a cosa serve
di uno così si fa a tradurre a questa
lingua e poi usiamo che
informazioni in un modo che può essere usato come
la definizione del test non ha nulla di sbagliato
con quello ma non lo penso
aiuta molto se vuoi farlo
testando intendo come se fossi tutto a posto io
significa che se lo avessimo fatto, la tua cosa sarebbe andata per quello
non ho nulla contro BDD quello che sono
solo dicendo è che non lo penso
l’utente comune che gli uomini d’affari possono
usa questi linguaggi per esprimere ciò che il
applicazione deve fare
altre domande stai testando come
che ottieni il 100% di copertura no
chi ami, davvero lo farai
prova chi viene al workshop in
Tasso di oggi va bene così non ci saremo
provando a fare TDD e ci proveremo
per fare questo miglioramento del del
architettura per averli
i test scorrono se ne hai
qualcosa è la prima cosa che sei tu
in realtà è possibile testare i dati decorativi in pila
se si desidera che ho fatto questo per
un po ‘di tempo e penso che sia perfettamente
fattibile e ciò che in realtà non lo fai
deve fare è testare i dati stessi I
significa come non penso sia una buona idea
per testare che possono prendere il
i contenuti del database sono ciò che tu
si aspettano che non è una buona idea per fare
la raccolta dei dati basata su detto questo
hai creato e si controlla che il
fetch è fatto correttamente perché, come ho detto
all’inizio questo è il codice di Apple
e dovresti testare il codice delle mele
cosa che potresti fare invece è essere
in grado di creare un po ‘di memoria persistente
negozio che è molto facile da fare e che cosa
tu fai poi ti passi e lo crei
impilare come falso uno stack che tu
usi per i test e poi ognuno
verrà eseguita la sottoclasse di un oggetto gestito
all’interno di questo nuovo stack questo nuovo stack
sarà memoria qualsiasi persistere
e lo store condividerà la mamma
Non ricordo il significato del
indica il modello dell’oggetto gestito
grazie quindi il modello oggetto gestito
sarà condiviso da entrambi gli stack il solo
differenza l’unica differenza effettiva
sarà quello per quello vero lo farai
essere persistenti i dati in un file o in
molti mentre nei dati che usi per
testare i dati non sarà
persistente perché verrà creato in
memoria la mia raccomandazione è che tu
crea questo stack per ciascuno dei test
quindi quando fai il setup e il
smontaggio del tuo caso di test che crei a
impilare , esegui il test e distruggi
lo stack e di nuovo sembra molto
di lavoro probabilmente ci vuole più tempo
di sì una variabile ma dal momento che è
accadendo nella memoria è molto veloce così io
hanno un sacco di test in esecuzione dati principali
e non penso che sia un problema per te
può davvero eseguirli correttamente ma questo
quello che stavo dicendo è che questi
dovrà avvenire presso la persistenza
strato mentre questo è completamente non correlato
a cosa succede nella logica aziendale
e completamente estraneo a ciò che accade
alla persistenza e alla presentazione
logica puoi essere in grado di testare
ognuno di questi strati separatamente
requisiti per scrivere una buona pulizia
l’architettura è quella degli strati che tu
l’uso ha una dipendenza che può solo andare
verso l’interno così nello strato esterno di
il vostro un codice che avete cose che si possono
essere disposti a cambiare in futuro come
per esempio l’interfaccia utente o il database se
diciamo che ora vuoi cambiare
dai dati di base
– vero o il contrario o tu
voglio usare la polizia perché tu hai
capito che non ti serve così tanto
potere lì accade la stessa cosa con il
UI e probabilmente dici che sto usando
l’interfaccia utente quella che mi fornisce Apple
con per il cellulare sì e ora
vuoi rivolgerti ad Apple TV e ora
vuoi indirizzare il sistema operativo dell’orologio, quindi se
hai le tue opinioni completamente separate
dalla tua logica aziendale questo sta andando
essere molto più facile, molto bene
perché il tuo livello di vista può essere anche a
diverso per ognuno dei tuoi obiettivi
quindi i tuoi obiettivi useranno a
vista diversa a seconda che tu
stanno rivolgendo gli Osservatori o la Mela
TV o il telefono cellulare sono tutto messo a posto
così hai risolto la vecchia domanda così
grazie mille mi sento libero di chiamare
io qualsiasi pasticcio
tu
Please follow and like us: