Я пытаюсь провести юнит-тестирование некоторых классов, использующих класс Singleton, конструктор которого делает то, что я не могу (и не должен) делать из среды юнит-теста. Мой идеальный сценарий - закончить с подавлением конструктора, а затем заглушить другие методы-члены, которые вызывают мои тестовые классы. Моя проблема в том, что я не могу подавить конструктор.
Мое понимание способа решить эту проблему будет выглядеть примерно так:
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 ударил, и он все еще вызывает супер-конструктор.
Я что-то делаю глупо? Я нашел пример в Интернете, делающий почти точно это, но он использовал устаревший метод suppressConstructor. Несмотря на осуждение, я тоже пытался, но безрезультатно ...
Возможно ли то, что я пытаюсь сделать? Если так, что я делаю не так?
* Отредактированная версия теперь работает.