Voglio rendere una classe testabile usando l'iniezione di dipendenza. Ma la classe crea più oggetti in fase di esecuzione e passa valori diversi al loro costruttore. Ecco un esempio semplificato:
public abstract class Validator {
private ErrorList errors;
public abstract void validate();
public void addError(String text) {
errors.add(
new ValidationError(text));
}
public int getNumErrors() {
return errors.count()
}
}
public class AgeValidator extends Validator {
public void validate() {
addError("first name invalid");
addError("last name invalid");
}
}
(Esistono molte altre sottoclassi di Validator.)
Qual è il modo migliore per cambiare questo, quindi posso iniettare un oggetto falso al posto di ValidationError?
Posso creare un AbstractValidationErrorFactory e iniettare invece la factory. Funzionerebbe, ma sembra che finirò per creare tonnellate di piccole fabbriche e interfacce di fabbrica, per ogni dipendenza di questo tipo. C'è un modo migliore?