Sarei difensivo quanto devi esserlo. Un po 'ambiguo, credo di si ma cercherò di spiegare.
Quando hai ragione su un metodo, se quel metodo ha parametri di input devi prendere la decisione su cosa ti aspetti da quei parametri. In situazioni e luoghi all'interno di un'applicazione questa sarà diversa. Ad esempio, se un metodo o un pezzo di codice accetta dati da un input dell'utente, allora dovresti coprire tutta la base di codice e gestire qualsiasi input di conseguenza tramite un messaggio di errore o un modo carino di visualizzare dati inaccettabili.
Se il metodo è un idem API esposto. Non puoi controllare ciò che sta arrivando, quindi dovresti aspettarti di provare a coprire tutti gli aspetti e il programma di conseguenza.
Per i metodi prodotti all'interno del motore principale del tuo progetto, qui devi prendere una decisione. Suppongo che i dati in arrivo siano stati pre-selezionati e convalidati prima che arrivino o devo inserire i controlli necessari. Immagino che questo dipenda dal livello concettuale del metodo e se questo è un posto accettabile da controllare. Quindi le cose che potrei considerare sono:
1) È questo l'unico posto in cui dovrò fare questo controllo? Questa variabile dovrà essere controllata in molti posti diversi per questa condizione. In tal caso, posso fare il controllo una volta più in alto nella catena e poi assumerne la validità in seguito
2) Ci sono altri componenti del sistema che dovrebbero funzionare con i metodi e le interfacce che scrivo. In tal caso, è possibile controllare attraverso le dichiarazioni di asserzione di debug, le eccezioni di debug, i commenti sui metodi e l'architettura di sistema generale il risultato richiesto o i dati dovranno essere messi in atto.
3) Quali sono i risultati del fallimento a questo punto del codice. Provocherà il fallimento dell'intera cosa? Qualunque errore verrà rilevato altrove e tale errore verrà colto almeno.
4) Ha senso mettere un assegno qui? A volte mettere un controllo su una parte di possibili dati corrotti, anche se aiutare a risolvere il problema a quel punto e non eliminare errori potrebbe aiutare a coprirlo. A quel punto potresti passare ore a inseguire un problema diverso solo per scoprire che il problema reale era dovuto a un controllo valido sui dati che risalivano nella catena di eventi che sono ricaduti su quello segnalato dall'utente / sviluppatore.
In generale, sono un programmatore difensivo, tuttavia credo anche che con un TDD accurato e test di unità appropriati sia possibile inserire i controlli nel codice ai livelli richiesti ed essere sicuri che funzioni come dovrebbe una volta che arriva a sezioni di livello inferiore .