依存関係注入を使用してクラスをテスト可能にしたい。しかし、クラスは実行時に複数のオブジェクトを作成し、コンストラクターに異なる値を渡します。簡単な例を次に示します。
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");
}
}
(Validatorには他にも多くのサブクラスがあります。)
これを変更する最良の方法は何ですか?ValidationErrorの代わりに偽のオブジェクトを注入できますか?
AbstractValidationErrorFactoryを作成し、代わりにファクトリを注入できます。これでうまくいきますが、この種の依存関係ごとに、たくさんの小さなファクトリーとファクトリーインターフェースを作成してしまうようです。もっと良い方法はありますか?