Nelle ultime settimane ho rimuginato e studiato 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.
Si presenta uno scenario frequente in cui A e B utilizzano entrambi componente C . Tuttavia A e B hanno requisiti leggermente diversi per, e fanno ipotesi leggermente diverse su C . Se sono lo sviluppatore di A come e dove collaudo le mie ipotesi su C ?
Ovviamente il test unitario A con ipotesi assurde su C va bene per testare A in isolamento, ma non prova le ipotesi stesse.
Un'altra possibilità è aggiungere test unitari per C . Tuttavia questo non è l'ideale perché, mentre A è in sviluppo, l'alterazione dei test per C con ipotesi in evoluzione da A sarà eccessivamente maldestra. Infatti, lo sviluppatore di A s potrebbe non avere nemmeno un accesso adeguato ai test unitari di C (ad esempio una libreria esterna).
Per inquadrare questo con un esempio più concreto: supponi che questa sia un'applicazione di nodo. A e B dipendono da C per leggere un file (tra le altre cose) e memorizzare il contenuto del file in oggetto passato a C . All'inizio tutti i file che C gestisce sono piccoli e possono essere letti in modo sincrono senza blocchi significativi. Tuttavia lo sviluppatore di B si rende conto che i suoi file stanno diventando enormi e ha bisogno di cambiare C in una lettura asincrona. Ciò si traduce in un errore di sincronizzazione sporadica in A , che presuppone ancora che C stia leggendo i file in modo sincrono.
Questo è il tipo di bug che è notoriamente difficile da rintracciare dai test di integrazione completi e che potrebbe non essere affatto coinvolto nei test di integrazione. Inoltre, non viene rilevato dai test unitari di A s perché le ipotesi di A s vengono prese in giro. Tuttavia potrebbe facilmente essere catturato da un test di integrazione "mini" che esercita solo A e C .
Ho trovato solo alcuni riferimenti a questo tipo di test. Integrazione nel Piccolo , Component Integration Testing , Integrazione unità Test. Si riferisce anche a test BDD piuttosto che a un test formale dell'unità TDD.
Come posso colmare questo vuoto di test? Specificamente - dove metto tali test? Come faccio a simulare gli input di A e C per i test di integrazione "mini"? E quanto sforzo dovrebbe essere messo nel separare le preoccupazioni dei test tra questi test e i test unitari? O c'è un modo migliore per riempire il vuoto test?