Singletonで単体テスト
久しぶりにJava。Singletonパターンをつかったクラスで設定をしているprotectedメソッドをオーバーライドした上で単体テストをどうやるかで困っている。
public class SomeClass{
private static final SomeClass instance = new SomeClass();private SomeClass(){
this.someMethod();
}
public SomeClass getInstance(){
return this.instance;
}protected void someMethod(){
//何かの処理
}
}
これだと通常のクラスのようにテストクラス内で
SomeClass some = new Some(){
protected void someMethod(){
//上書き処理
}
};
ということがgetInstance()でインスタンスを生成しないといけないので,できない。ネットで調べるとDIパターンを使うのも一手らしい。
public interface SomeClass{
protected void someMethod();
}public class SomeClassImpl implements SomeClass{
//お決まりの処理
protected void someMethod(){
//なんらかの処理
}
}
確かにこれでSomeClassImplのモックをつくればオーバーライドできるけど何か面倒だ。まぁ,いい手が他に思いつかないしこれでいってみよう。