In your opinion, do you think it is a waste of time to make checks that you know
there is no possible way of it being there/not being there, or would you just put
it there just in case there is a bug or something?
Ci sono tre possibilità, è implossabile
int i = 0;
if (i==1 && i==2) {
// useless test
}
È possibile ma richiede una modifica del codice da qualche parte.
int i = 0;
if (i>0) {
// line above should prevent this from happening.
// extreme case, if this branch is executing someone did something wrong
}
E infine potrebbe semplicemente essere uno stato non valido, qualcosa che non pensate possa accadere dati dati buoni.
Il primo caso è una totale perdita di tempo, nessuna modifica al codice o l'input dell'utente può portare al test successivo. Il secondo caso è MOLTO inutile, ma una variazione su di esso può essere utile. Fondamentalmente, il secondo caso presentato richiede una modifica del codice per quel ramo da prendere, ma un esempio più complesso potrebbe essere utile per convalidare un'ipotesi che è inserita nel seguente algoritmo, ma non è intrinsecamente applicata.
Per esempio, se invece di un int, si stesse creando un utente non inizializzato, quindi un controllo che il nome fosse vuoto potrebbe teoricamente essere valido - l'utente potrebbe essere cambiato in modo che venga fornito un nome predefinito e se una scrittura una volta che la proprietà è stata modificata in modo che il nome predefinito possa essere cambiato, potrebbe rovinare tutto.
Ma in realtà, ci sono modi migliori per testare tali cose (unit test ad esempio, anche se non è proprio quello per cui sono).
Infine, c'è l'ultimo caso - e se lo provi dipende da cosa puoi fare al riguardo che è utile. E quanto sia improbabile che tu pensi che - se realisticamente non accadrà mai, allora provarlo per te è una perdita di tempo. Se d'altro canto, non dovrebbe accadere, ma può, quindi, prenderlo se puoi fare qualcosa di utile.