In generale
Quando hai abbastanza test automatici per avere fiducia nella tua pipeline di integrazione continua?
La risposta probabilmente diventa chiara se pensi a ciò di cui vuoi essere sicuro. In definitiva, mappa 1-1; ogni test ti rende sicuro dell'unica cosa che verifica:
- Il test unitario ti dà la certezza che una classe (o un modulo) fa ciò per cui è stata testata.
- Il test di integrazione ti dà la certezza che diverse unità lavorano insieme nel modo in cui è testato.
- I test end-to-end ti danno la certezza che l'intera applicazione fa una certa cosa, come descritto nel test.
Dal modo in cui hai formulato la tua domanda, probabilmente stai pensando in un senso generale in questo momento, ad esempio:
Voglio essere sicuro che la mia applicazione può fare X .
Quindi scrivi un test end-to-end che prova a fare X e controlla se lo fa correttamente.
Più concreto
È tutto autoreferenziale, ma è perché è quello a cui si riduce. Semplicemente non c'è altro.
Ad esempio, immagina di scrivere un'app per creare ricette di cucina. Una caratteristica è che, se aggiungi diverse quantità di diversi tipi di formaggio, ti dà la temperatura e il tempo corretti in modo che si sciolgano tutti.
Quindi puoi scrivere un test unitario per il tuo CheeseMeltCalculator
, dove gli dai 100 g di Gouda e 200 g di formaggio Emmental, e poi controlli che la temperatura e il tempo siano corretti. Ciò significa che ora puoi essere sicuro che CheeseMeltCalculator
funziona con 100 g di Gouda e 200 g di formaggio. Ora, se ripeti questo test con 300 g di Gouda anziché 200 g, puoi essere abbastanza sicuro che funzioni correttamente per valori diversi. È possibile aggiungere test per 0
, -1
e int.MaxValue
g di Gouda essere sicuri che il codice non inciampare (o viaggi correttamente come previsto) per l'ingresso strano.
È possibile scrivere un test di integrazione per verificare che CheeseMeltCalculator
sia incorporato correttamente nell'intero processo di calcolo della temperatura e del tempo degli alimenti. Se il problema persiste, ma i CheeseMeltCalculator
test sopra riportati sono soddisfacenti, si può essere certi che il bug si trova in altri calcolatori o nel modo in cui vengono combinati i dati di diversi calcolatori.
E infine puoi scrivere un test end-to-end per creare un'intera ricetta, e una delle cose che controlli è la temperatura e il tempo del risultato. Se i precedenti 2 livelli di test vanno bene, ma per questo va storto, allora puoi essere di nuovo sicuro che quelle parti siano corrette e l'errore è qualcosa su come il calcolo della temperatura è integrato nell'applicazione. Ad esempio, forse l'input dell'utente non è stato trasferito correttamente.
E infine , se tutti questi test vanno bene, allora puoi essere sicuro che " se aggiungi quantità diverse di diversi tipi di formaggio, ti dà la temperatura e il tempo corretti in modo che si sciolgano tutti "
Per farla breve
Il punto è che non puoi avere un test "funziona correttamente". Puoi solo provare "Se faccio X, succede Y".
Tuttavia, questo è esattamente ciò che dovrebbe essere nelle specifiche tecniche per il progetto. Un'affermazione come " se aggiungi diverse quantità di diversi tipi di formaggio, ti dà la temperatura e il tempo corretti in modo che si sciolgano tutti " non solo dà al cliente chiare aspettative su ciò che farà il prodotto finito, ma può anche essere trasformato in test automatizzati.
informazioni addizionali
L'utente Richard ha aggiunto queste informazioni in una modifica:
Martin Fowler ha un bellissimo riassunto sul suo sito web sulle strategie più comuni: https://martinfowler.com/articles/microservice-testing/
Non voglio rimuovere questo, ma voglio dire questo: rispetto a questa risposta, non è un "riassunto", ma piuttosto una spiegazione molto più approfondita, con una bella grafica e tutto il resto.
Il mio consiglio sarebbe: se tutto ha senso per te dopo aver letto la mia risposta, hai finito. Se le cose sembrano ancora poco chiare, dedica un po 'di tempo e leggi l'articolo collegato.