Имитируемый объект, созданный фабрикой, имеет нулевое поле (инициализированное постконструкцией)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Имитируемый объект, созданный фабрикой, имеет нулевое поле (инициализированное постконструкцией)

Сообщение Anonymous »

У меня есть эта фабрика:

Код: Выделить всё

public class ClientFactory {

public static Process getClientByServiceId(long serviceId) {
return switch (ServiceTypeEnum.getByServiceId(serviceId)) {
case IMAGEPROCESSOR -> new ImageProcessorImpl();
case TEXTANALYZER -> new TextAnalyzerImpl();
case DOCUMENTPARSER -> new DocumentParserImpl();
case FILEHANDLER -> new FileHandlerImpl();
//etc
};
}
Где Process — это интерфейс, а для правильной реализации я использую фабрику.
Все реализации содержат что-то вроде этого:

Код: Выделить всё

@Component
public class ImageProcessorImpl implements Process {

private MyClient myClient;

@PostConstruct
public void initialize() {
myClient= new RestClient(someVariables..);
}
}
@Override
public buy() {
restClient.request();
}
Это используется службой, которая вызывает фабрику и после этого вызывает метод buy.
Теперь, когда я пытаюсь запустить тест junit с Mockito, независимо от того, как я внедряю макеты, я всегда получаю, что myClient имеет значение null!
Я издевался над клиентом, издевался над всеми методами, но результат всегда был нулевым. Я уверен, что это зависит от некоторых проблем с инъекциями, с которыми Mockito не может справиться. Есть ли способ проверить это?

Подробнее здесь: https://stackoverflow.com/questions/793 ... postconstr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»