Immagina di avere una classe che rappresenta una percentuale. Questa classe fornisce auto-convalida attraverso le eccezioni, non consentendo valori inferiori a 0 o superiori a 100 rispettivamente.
Quando si segue TDD, la funzionalità di un metodo / classe dovrebbe essere evidente dal test che sta testando la parte del codice. Se un test in questo caso include un intervallo?
Pseudocodice:
testNegativeValuesAreNotAccepted() {
try {
Percentage::withValue(Integer.random(Integer.MIN, -1));
Assert.fail("Percentage MUST NOT accept negative values.");
} catch (InvalidPercentageValue e) {
}
}
testPercentageIsCreatedWithCorrectValue() {
Integer value = Integer.random(0, 100);
Percentage percentage = Percentage::withValue(Integer.random(0, 100));
Assert.equals(true, value.equals(percentage.value()));
}
testValuesOver100AreNotAccepted() {
try {
Percentage::withValue(Integer.random(101, Integer.MAX));
Assert.fail("Percentage MUST NOT accept values over 100.");
} catch (InvalidPercentageValue e) {
}
}
Questo darebbe allo sviluppatore della classe Percentage
informazioni sufficienti per lui per programmare la classe? C'è forse troppa informazione per loro? In che modo questo problema di autonomia può essere risolto in modo diverso?