La fase "test unitario" è iniziata come descrizione di test delle singole funzioni e
altri piccoli bit di codice / capacità. Se questo è tutto ciò che stai testando - bit di
il tuo sistema, in isolamento l'uno dall'altro, non c'è da meravigliarsi se stai perdendo
la fiducia nei test per essere una misura corretta della qualità complessiva del codice o "lo fa
fa quello che dovrebbe fare? "
Il test molto ristretto aiuta un po ', ma solo un po'. E 'fantastico che tu
non stanno ottenendo fallimenti di produzione che riconducono a cose che sono state
testato. Il problema sembra essere lo spazio bianco intermedio: non testato
percorsi di esecuzione, la combinazione di elementi che si verificano quando tutte le parti
venire insieme che non sono attualmente testati. Senza essere troppo Pollyannaish,
c'è il tuo problema O una buona parte di esso, in ogni caso.
Questa è forse un'eresia, ma ha funzionato bene per me: i test unitari non sono più
su unità isolate e strette. Sono un test automatizzato per scopi generici
funzionalità che può e deve testare non solo singole funzioni, classi e
oggetti, ma combinazioni di essi, a vari livelli di composizione.
Potrei aver eseguito PHPUnit
o py.test
o qualunque sia il "test unitario" locale
il framework è, ma aggiungo con entusiasmo test fino a includere test dell'intero
applicazione o servizio integrati. Eseguo esempi complessi dell'intera app
funzionalità, e farlo non solo contro semplici casi di dati, ma anche contro
alcuni casi estremi, brutti, complessi.
Non è così facile testare in questo modo. Richiede la creazione di alcuni
simulare oggetti e / o costruire interi
macchine virtuali e popolarle con server, set di dati e altra colla
logica solo per eseguire i test. È più lavoro impostare questo scenario di test, ma
con istanze di virtualizzazione e cloud, strumenti come
Fabric e Vagrant rendono
è fattibile in modi che non era, cinque anni indietro.
Può persino essere complicato determinare se un test ha avuto esito positivo o negativo. Se tu sei
usato per testare piccole funzioni, è difficile capire perché - ma inizia a provare a giudicare
se hai manipolato correttamente una struttura dati complessa e diventa più
chiaro. Può essere anche peggio se stai cercando di vedere un particolare percorso attraverso a
GUI o web app per assicurarsi che "abbia fatto quello che doveva fare". Ma con il moderno
strumenti, è possibile - ed i risultati sono estremamente utili nell'esercitare il
intero sistema.
Il test non può mai essere una prova di correttezza in tutte le possibili condizioni. Ma
esercitando la tua app o il servizio nel suo insieme, con un caso complesso e all'avanguardia
esempi progettati per sottolineare la tua logica ... prima ti mostrerà dove sono molti
i tuoi bug mentono ("La verità ti renderà libero - ma prima ti renderà
miserabile ".)
Ma mentre aggiusti quelli e il tuo sistema sta eseguendo con successo casi difficili e
di routine, allora crescerà la tua fiducia nella sua correttezza e robustezza.
Quando trovi nuovi bug e li correggi, aggiungerai test per loro e altri casi
come loro non avevi precedentemente considerato. Su passaggi successivi al test
lavoro, troverai nuove cose che vuoi testare o nuove varianti che vuoi testare
contro. Li aggiungi e, dopo la corsa, stai testando ancora di più del totale
sistema.
Se qualcuno vuole sostenere che non sono davvero un test unitario, ne sto facendo un po '
forma di integrazione, modulo o test di sistema - bene qualunque cosa! Io uso lo stesso
(unit test) quadri, test runner, "è passato?" riferendo che lo farei
per testare una funzione a 2 linee. Se vuoi dare nomi più elaborati per alcuni dei
prova, buttati fuori. Quello che mi interessa è che i test sono automatizzati,
che posso eseguirli facilmente per ogni build di software e che testano tanto
della funzionalità totale possibile.
Per farla breve, invece di perdere la fiducia nei test, raddoppia. Fai il
test di cui hai bisogno, ma al momento non lo stai facendo. Metti alla prova le cose insieme, sempre
combinazioni più impegnative e complete, contro sempre più esecuzione
ambienti. Rimarrai stupito dagli insetti che si agitano e da quanto sei tu
scopri di conseguenza le interazioni del tuo sistema. Intempestivamente, sarai sbalordito
su come ti muovi con sicurezza dalla versione alla versione, perché il tuo shakedown
è stato reale e sistematico.