Я не думаю, что MockClassLoader предполагается использовать непосредственно в тестовом коде, он больше похож на деталь реализации PowerMock. Вместо этого ознакомьтесь с политиками PowerMock. Реализация макетной политики может, например, подавлять некоторые методы, подавлять статические инициализаторы или вызовы метода перехвата для каждого класса. Предположим, у вас есть тесно связанные код, как это:
public class Holder {
private final DataObject dataObject = new DataObject();
public DataObject getData() {
return dataObject;
}
}
Можно создать политику для управления DataObjects:
public class MyMockPolicy implements PowerMockPolicy {
public void applyClassLoadingPolicy(MockPolicyClassLoadingSettings settings) {
settings.addFullyQualifiedNamesOfClassesToLoadByMockClassloader(Holder.class.getName());
}
public void applyInterceptionPolicy(MockPolicyInterceptionSettings settings) {
Method getDataMethod = Whitebox.getMethod(Holder.class);
DataObject dataObject = new DataObject(); //custom object
settings.addSubtituteReturnValue(getDataMethod, dataObject);
}
}
и применять его с аннотациями
@RunWith(PowerMockRunner.class)
@MockPolicy(MyMockPolicy.class)
public class DependencyUserTest {
// test methods
}
Хорошо, отлично. Могу ли я использовать его для создания пользовательского объекта dataObject. Но, чтобы убедиться, что у меня не может быть общедоступного метода доступа, бизнес-логика внутри класса будет напрямую использовать dataObject. –
Удивительно, это действительно сработало. –