Se il "gettare" dichiarazione in questione è veramente irraggiungibile in qualsiasi scenario possibile, allora dovrebbe essere cancellati e sostituito con:
Debug.Fail("This should be unreachable; please find and fix the bug that caused this to be reached.");
Se il codice è raggiungibile quindi scrivere uno unit test che prova questo scenario Gli scenari di segnalazione degli errori per i metodi accessibili al pubblico sono scenari perfettamente validi. Devi gestire tutti gli input correttamente, anche gli input cattivi. Se la cosa corretta da fare è lanciare un'eccezione, prova che stai generando un'eccezione.
AGGIORNAMENTO: in base ai commenti, è infatti impossibile che l'errore venga colpito e pertanto il codice non è raggiungibile. Ma ora anche Debug.Fail non è raggiungibile e non viene compilato perché il compilatore nota che un metodo che restituisce un valore ha un punto finale raggiungibile.
Il primo problema non dovrebbe essere effettivamente un problema; sicuramente lo strumento di copertura del codice dovrebbe essere configurabile per ignorare il codice di debug non raggiungibile. Ma entrambi problema può essere risolto riscrivendo il loop:
public int FirstInvalidDigitPosition
{
get
{
int index = 0;
while(true)
{
Debug.Assert(index < this.positions.Length, "Attempt to get invalid digit position but there are no invalid digits!");
if (!this.positions[index].Valid) return index;
index++;
}
}
}
Un approccio alternativo sarebbe quello di riorganizzare il codice in modo che non si ha il problema, in primo luogo:
public int? FirstInvalidDigitPosition {
get {
for (int index = 0; index < this.positions.Count; ++index) {
if (!this.positions[index].Valid) return index;
}
return null;
}
}
e ora non è necessario limitare i chiamanti a chiamare prima AreThereInvalidDigits; rendi semplicemente legale chiamare questo metodo in qualsiasi momento. Sembra la cosa più sicura da fare. I metodi che esplodono quando non si effettua un controllo costoso per verificare che siano sicuri di chiamare sono metodi fragili e pericolosi.
fonte
2010-08-20 21:59:42
Il semplice fatto che tu dica che non dovrebbe essere eseguito e non può essere raggiunto, mi dice "Rimuovi". Hai convalidato la stringa come non valida per arrivare qui, quindi sai che la proprietà restituirà qualcosa. – Michael