Nelle ultime settimane ho riflettuto e ricercato come colmare una lacuna nella nostra metodologia di test. In termini semplificati, i test unitari sono troppo piccoli e i test di integrazione tradizionali sono troppo grandi.
Uno scenario frequente viene su dove A
e B
componente sia l'uso C
. Tuttavia A
e B
avere requisiti leggermente diversi per, e fare un po 'diverse ipotesi circa C
. Se sono lo sviluppatore di A
come e dove testare i miei presupposti C
?
Ovviamente i test unitari A
con ipotesi beffarde vanno C
bene per i test A
in isolamento, ma non verificano gli stessi presupposti.
Un'altra possibilità è aggiungere test unitari per C
. Tuttavia questo non è l'ideale perché, mentre A
è in fase di sviluppo, alterare i test C
con ipotesi in evoluzione da A
sarà eccessivamente goffo. In effetti A
, lo sviluppatore potrebbe non avere nemmeno un accesso adeguato ai test unitari C
(ad esempio una libreria esterna).
Per inquadrare questo con un esempio più concreto: supponiamo che si tratti di un'applicazione nodo. A
e B
dipende dalla C
lettura di un file (tra le altre cose) e dalla memorizzazione del contenuto del file nell'oggetto passato a C
. Inizialmente tutti i file che C
gestiscono sono piccoli e possono essere letti in modo sincrono senza blocchi significativi. Tuttavia, lo sviluppatore si B
rende conto che i suoi file stanno diventando enormi e deve passare C
a una lettura asincrona. Ciò si traduce in un bug di sincronizzazione sporadico A
, che sta ancora assumendo la C
lettura dei file in modo sincrono.
Questo è il tipo di bug notoriamente difficile da rintracciare dai test di integrazione completi e potrebbe non essere individuato affatto nei test di integrazione. Inoltre, non viene colto dai A
test unitari perché le A
assunzioni di s sono derise. Tuttavia potrebbe essere facilmente catturato da un "mini" test di integrazione che esercita solo A
e C
.
Ho trovato solo alcuni riferimenti a questo tipo di test. Integrazione nel piccolo , Test di integrazione dei componenti , Test di integrazione delle unità . Si riferisce anche in qualche modo alla direzione del test BDD piuttosto che al test formale dell'unità TDD.
Come posso colmare questa lacuna di prova? In particolare, dove posso mettere tali test? Come faccio a deridere gli input di A
e C
per i "mini" test di integrazione? E quanti sforzi dovrebbero essere fatti per separare le preoccupazioni dei test tra questi test e test unitari? O c'è un modo migliore per colmare il gap di test?