Supponiamo che stai testando un "intervallo" di classe, che rappresenta gli intervalli di numeri naturali:
var interval= new Interval(1,100);
Ora i tuoi primi due test sono "verdi":
AssertIsTrue(interval.Contains(100))
AssertIsFalse(interval.Contains(101))
e sei sicuro che l'autore non abbia fatto "errore di off-one".
Sfortunatamente, l'implementazione è simile a questa
Contains(x)
{
return (x>= beginRange && x == endRange);
// above line has a typo, "==" should have been be "<="
}
Quindi sarebbe stato meglio aggiungere un altro test in prima persona,
AssertIsTrue(interval.Contains(99));
che fallisce, rivelando il bug mancato ai primi due test.
O per essere più generali: gli errori off-by-one non si manifestano sempre mescolando "<" e "<=", ci sono molte altre possibilità per ottenere cose del genere errate, e come tester, è meglio non fare alcuna ipotesi su come appare l'implementazione interna di una funzione.