Quero tornar uma classe testável usando injeção de dependência. Mas a classe cria vários objetos em tempo de execução e passa valores diferentes para o construtor. Aqui está um exemplo simplificado:
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");
}
}
(Existem muitas outras subclasses do Validator.)
Qual é a melhor maneira de mudar isso, para que eu possa injetar um objeto falso em vez de ValidationError?
Eu posso criar um AbstractValidationErrorFactory e injetar a fábrica. Isso funcionaria, mas parece que vou acabar criando toneladas de pequenas fábricas e interfaces de fábrica, para todas as dependências desse tipo. Existe uma maneira melhor?