I test automatici sono suddivisi in unitari (unit), di integrazione (integration) e end-to-end (end-to-end, E2E), per coprire in modo completo il controllo del sistema a diversi livelli.
Storia della questione: Questa classificazione è nata dalla necessità di testare le applicazioni sia a livello di singole parti che nel loro insieme. Pertanto, vengono distinti i livelli di test:
Problema: Gli errori si verificano spesso non solo nella logica di un singolo metodo, ma anche nei punti di contatto tra i componenti, o durante l'esecuzione "reale" dell'intero sistema con servizi esterni. Se si mescolano tutto in un unico insieme, è difficile localizzare rapidamente un bug o capire dove sia effettivamente sorto.
Soluzione:
Distinguere i tipi di test è vitale per:
Caratteristiche chiave:
Si possono considerare i test di integrazione semplicemente "grandi" test unitari?
No, i test di integrazione testano il funzionamento di più componenti insieme, e non solo singole funzioni. Inoltre, non sempre è possibile utilizzare mock: i servizi reali interagiscono tra loro.
Devono tutti i test essere end-to-end (E2E)?
No, questo è un approccio costoso e complesso. Gli E2E sono necessari solo per scenari utente critici; la maggior parte della logica è coperta da altri test.
I test unitari sono sempre veloci?
Non sempre. A volte, non è possibile isolare il codice, o il metodo dipende da risorse esterne complesse. In tal caso, il test smette di essere unitario.
In un'azienda, la funzionalità principale è stata coperta solo con test E2E — ogni modifica veniva controllata di notte, i test fallivano in modo instabile e i bug venivano scoperti tardi.
Pro:
Contro:
Il team ha costruito una piramide di test: basso — test unitari, medio — test di integrazione, alto — solo gli E2E più importanti.
Pro:
Contro: