Questa domanda riguarda la misura in cui ha senso testare le unità.Test delle unità su cosa il programma NON dovrebbe fare
Ho scritto un programma tipico che aggiorna un database con le informazioni che arrivano nei messaggi XML. Ho pensato ai test unitari di cui aveva bisogno. Il programma inserisce o aggiorna i record in base a regole complicate, che generano molti casi diversi. In un primo momento, ho deciso di testare le seguenti diverse condizioni per ogni caso:
- il numero necessario di record aggiunto
- I campi di record inseriti e aggiornati sono riempiti correttamente
- No records esistenti, ma irrilevante per i dati caricati sono stati modificati
Mi sembrava che il terzo tipo di test avesse davvero senso. Ma presto ho scoperto che non è così facile da implementare, perché è effettivamente necessario fare una specie di snapshot del database e quindi confrontarlo con quello modificato. Ho iniziato rapidamente a essere infastidito dal fatto che avevo bisogno di scrivere tali test per diversi casi di modifica del database, mentre questi test non erano molto preziosi e informativi in termini di specifiche e design del codice di produzione.
Poi ho pensato, forse, sto testando troppo? E se no, quindi se ho prova che il programma non modifica i record irrilevanti, allora perché non provo che:
- non modifica altri database
- non elimina i file sui dischi
- NON invia e-mail a Santa Klaus?
Mi sono completamente confuso su dove tracciare il limite. Dove lo disegneresti?
UPDATE
ho letto molti suggerimenti utili nelle risposte e segnato uno come la soluzione, perché ha le idee più utile per me, ma ancora non è chiaro per me come eseguire il test correttamente gli aggiornamenti del database. Ha senso verificare che il programma non cambi troppo? E se è così, allora quanto accuratamente?
+1 Questo è praticamente corretto. Aggiungerò che non eseguo troppi test negativi a meno che non ci sia un bug * specifico * che scopro dove alcune azioni causano effetti collaterali indesiderati. Quindi scrivo un test per verificare che l'azione non causi l'effetto collaterale e corregga il codice fino a quando il test non ha superato. Non ho mai ** mai ** cancellato quel test solo nel caso in cui provochi una regressione in seguito. Come regola generale, la maggior parte dei bug dovrebbe comportare un test unitario. Questo è un ottimo modo per assicurarsi che i bug del passato non tornino nelle versioni successive. – cdhowie