Stai cercando test sulle mutazioni.
L'idea del test delle mutazioni consiste nel verificare che il codice possa essere modificato per causare il fallimento del test, come hai sottolineato. Un esempio è come tale:
public double getDiscountedRate(int age, int employmentDurationInMonths) {
return age < 30 || employmentDurationInMonths < 18 ? 0.2 : 0.05;
}
Quindi, se abbiamo questo test:
@Test
public void canGetCorrectDiscountedRate() {
assert getDiscountedRate(29, 24) == 0.2;
}
L'asserzione sarà vera. Se la formula è modificata come tale:
public double getDiscountedRate(int age, int employmentDurationInMonths) {
return age < 30 && employmentDurationInMonths < 18 ? 0.2 : 0.05;
}
Quindi ci aspettiamo che l'asserzione sia falsa ora. Questo aiuta quando può esserci un errore incauto nel metodo, come (modifica post-operatore):
public double getDiscountedRate(int age, int employmentDurationInMonths) {
return age < 30 && employmentDurationInMonths < 18 ? 0.2 : 0.2; // where is 0.05?
}
In questo, il fatto che l'asserzione non abbia fallito per il codice modificato permetterà allo sviluppatore di sapere che stava restituendo erroneamente lo stesso tasso di sconto anche quando la condizione è falsa.
L'articolo di Wikipedia sui test delle mutazioni ha anche indicato utile 'fault injection' come articolo correlato.