Ecco alcuni codici falsi sotto test:
public void saveItem() {
try {
databaseInterface.saveItemToDatabase(item);
} catch (Exception e) {
// deal with it
return;
}
itemList.Add(item);
}
Durante la stesura di un test unitario, se non dovessi spegnere quella chiamata al database, i test engineer direbbero che si tratta di un test di integrazione, non di un test unitario poiché chiama un vero database che rende il test dell'unità lento, e una caratteristica di un test unitario è che dovrebbe essere veloce.
Quindi, interrompi la chiamata al database e verifica se l'elemento è stato salvato nell'elenco, terminando con un test unitario.
Crea anche un test unitario per verificare se la funzione saveItemToDatabase è stata effettivamente chiamata, quindi in questo nuovo test di unità decidi di prendere in giro la chiamata e asserire contro di essa.
Hai anche il compito di testare l'interfaccia del tuo database, per assicurarti che gli elementi vengano effettivamente salvati nel database, quindi fallo.
Tutti i tuoi test passano, quindi ora sai che 1) gli elementi vengono salvati nella lista 2) il tuo metodo saveItemToDatabase viene effettivamente chiamato 3) i tuoi test di unità che coprono il modulo del database mostrano che l'elemento viene effettivamente salvato nel banca dati.
Se sto capendo correttamente il test di integrazione, faresti un test di integrazione, testare tutte queste cose, questa volta usando una vera chiamata al database in un test. Pertanto, in un test di integrazione il test potrebbe eseguire le seguenti operazioni:
- Crea un elemento.
- Chiama saveItem () (un metodo oggetto) che salverà l'elemento appena creato.
- Esegui una query sul database per l'elemento utilizzando l'interfaccia del database.
- Verifica che l'elemento creato e il risultato della query siano uguali.
- Verifica che l'elemento che hai salvato sia stato aggiunto all'Elenco articoli
Sembra che il test di integrazione stia prendendo tutti i test unitari e ricontrollando ciò che fa ogni test unitario, eccetto che questa volta non stai stubando o deridendo qualcosa, quindi sembra che i test di integrazione siano un po 'ridondanti.
Sto fraintendendo cosa è un test di integrazione? Sembra quasi un test che dice: "Sì, il tuo codice di produzione funziona davvero quando non metti a tacere o derubare cose".