コンストラクターが単体テスト環境では実行できない(実行すべきではない)いくつかのことを実行するシングルトンクラスを使用するいくつかのクラスを単体テストしようとしています。私の理想的なシナリオは、コンストラクターが完全に抑制されてから、テストクラスが呼び出す他のメンバーメソッドをスタブ化することです。私の問題は、コンストラクターを抑制できないように見えることです。
これを解決する方法についての私の理解は、次のようになります。
public class MySingleton extends AbstractSingletonParent {
public final static MySingleton Only = new MySingleton();
private MySingleton(){
super(someVar); // I want the super-class constructor to not be called
//
//more code I want to avoid
}
public Object stubbedMethod() {}
}
public class ClassToBeTested {
public void SomeMethod(){
Object o = MySingleton.Only.stubbedMethod();
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(MySingleton.class)
public class TestClass {
@Test
public void SomeTest() {
suppress(constructor(MySingleton.class));
mockStatic(MySingleton.class);
PowerMock.replay(MySingleton.class);
// invoke ClassToBeTested, etc
PowerMock.verify(MySingleton.class);
//make some assertions
}
}
残念ながら、createMockの呼び出し中に、MySingletonコンストラクターがヒットし、それでもスーパーコンストラクターが呼び出されます。
私は愚かなことをしていますか?これをほぼ正確に実行している例をWebで見つけましたが、非推奨のsuppressConstructorメソッドを使用していました。非推奨にもかかわらず、私もそれを試しましたが、役に立ちませんでした...
私がやろうとしていることは可能ですか?もしそうなら、私は何を間違っていますか?
*編集バージョンが機能するようになりました。