Dopo aver letto il software orientato agli oggetti in crescita guidato dai test, ho appreso dell'isolamento del test e della fragilità del test. L'idea che ogni test dovrebbe essere molto specifico per un pezzo di codice o funzionalità e la sovrapposizione della copertura del codice con i test dovrebbe essere ridotta al minimo. L'ideale implicito che ogni modifica del codice dovrebbe comportare la rottura di un solo test. Evitare di passare il tempo trascorso attraverso più test non funzionanti per confermare che una modifica è la causa e se viene riparata dalle modifiche del test.Cosa dovrebbe essere deriso per un test di integrazione?
Ora questo sembra abbastanza semplice per i test di unità, sono molto isolati per loro natura. Tuttavia, quando presentato dai test di integrazione, sembra difficile evitare di eseguire più test nell'esercitare gli stessi percorsi di codice, in particolare quando vengono eseguiti in aggiunta ai test delle unità.
Quindi la mia domanda è: quali sono le dipendenze da prendere in giro durante i test di integrazione? Dovrebbe essere deriso qualcosa? Si deve testare un singolo percorso di esecuzione e si devono prendere in giro tutti gli effetti collaterali non direttamente rilevanti per questo percorso di codice?
Mi sto prendendo gioco dell'idea di eseguire test di integrazione pairwise. Prova una relazione tra due oggetti e prendi in giro tutto il resto. Quindi i cambiamenti in uno di questi oggetti dovrebbero avere un impatto minimo su altri test di integrazione, oltre a formare una catena completa di test end-to-end per mezzo di coppie.
Grazie per qualsiasi info ..
Modifica: tanto per chiarire, praticamente sto chiedendo: "Come devo fare per evitare un gran numero di non superano le prove integrazioni durante il normale corso dello sviluppo?". Il che presumo si ottiene usando dei mock, e perché ho chiesto a cosa deridere.
Aggiornamento: ho trovato un discorso molto interessante sui test di integrazione di J.B.Rainsberger, che ritengo risponda abbastanza bene, anche se forse un po 'controverso. Il titolo è "I test di integrazione sono una truffa", quindi, come puoi intuire, non difende affatto i test di integrazione (test di tipo end-to-end). L'argomento è che i test di integrazione saranno sempre molto al di sotto della quantità necessaria per testare accuratamente le possibili interazioni (a causa dell'esplosione combinatoria) e potrebbero dare una falsa sicurezza. Invece lui raccomanda ciò che chiama test di collaborazione e test di contratto. È un discorso di 90 minuti e sfortunatamente la lavagna non è molto chiara e non ci sono esempi di codice, quindi mi sto ancora prendendo in giro. Quando avrò una chiara spiegazione lo scriverò qui! A meno che qualcun altro non mi picchi ..
Ecco un breve riepilogo dei test di contratto. Sembra asserzioni di tipo Design by Contract, che a mio avviso potrebbero/sarebbero implementate in un modello di interfaccia non virtuale in C++.
http://thecodewhisperer.tumblr.com/post/1325859246/in-brief-contract-tests
test di integrazione sono un discorso video di truffa: http://www.infoq.com/presentations/integration-tests-scam
Sommario:
test di integrazione sono una truffa. Probabilmente stai scrivendo il 2-5% dei test di integrazione che devi testare a fondo. Probabilmente sei il test di duplicazione dell'unità in tutto il luogo. I tuoi test di integrazione probabilmente si duplicano l'un l'altro dappertutto. Quando un test di integrazione fallisce, chissà cosa è rotto?Scopri l'attacco su due fronti che risolve il problema: test di collaborazione e test contrattuali.
Mentre devo ancora leggere GOOS (vergogna su di me), sono abbastanza certo che non si tratta di test di integrazione quando dice che solo un test dovrebbe fallire per una modifica. –
Vedo, quindi pensi che la fragilità del test si applichi maggiormente ai test unitari rispetto ai test di integrazione? I test di integrazione sarebbero considerati intrinsecamente più fragili e si prevede che falliscano più spesso? – NitrousUK
No, al contrario. I test di integrazione testano un'immagine più ampia, quindi finché la funzionalità testata non cambia, non si suppone che falliscano. –