Доступ к тексту приложения из класса junit без каких-либо аннотаций @SpringBootTest, @Run с тестом

#spring-boot #junit

#пружинный ботинок #джунит

Вопрос:

Привет, я хочу получить доступ ApplicationContext к тесту junit приложения spring boot, я попробовал ниже —

 ApplicationContext applicationContext = SpringApplication.run(SampleApplication.class, args);  AppContext.getInstance().setContext(applicationContext);  

AppContext.java

 public enum AppContext {  INSTANCE;  public static AppContext getInstance() {  return INSTANCE;  }  public void setContext(ApplicationContext applicationContext) {  this.applicationContext = applicationContext;  }   public ApplicationContext getContext() {  return applicationContext;  }  }  

Тестовый класс Junit

 public class SampleApplicationITCase {  @BeforeClass  public static void setUp() throws Exception {  ApplicationContext context = AppContext.getInstance().getContext();  myClass = context.getBean(MyClass.class); // Getting Null for context here  }  }  

У меня есть ниже очередь блокировки в моем приложении, где я получаю java.lang.InterruptedException

 @Override public void run() {  while (true){  try {  String message = sampleQueue.poll(100, TimeUnit.MILLISECONDS);  if (isNull(message)){  continue;  }  process(message);  } catch (InterruptedException | IOException ex) {  log.error("Failed to poll record from queue ", ex);  }  } }  

Пожалуйста, обратите внимание, что я запускаю свое приложение перед запуском теста junit.

Я не хочу использовать @SpringBootTest , @RunWith(SpringRunner.class) потому что я уже использую ThreadPoolTaskExecutor (поток) в своем приложении, и если я использую эти аннотации, которые я получаю java.lang.InterruptedException , потому что эти аннотации снова запустят контекст или снова запустят приложение, пожалуйста, исправьте меня, если это неправильно.

Мой вопрос в том, как получить доступ ApplicationContext в junit без каких-либо тестовых аннотаций в приложении Spring Boot.

Комментарии:

1. Вы можете использовать свой собственный сервис исполнителя, возможно, у вас там проблема. Вы не можете «запустить свое приложение», а затем ожидать, что тест, который вы запускаете в отдельном процессе, сможет получить доступ к контексту этого приложения.

2. Привет, дайну, спасибо, что занялся этим. У меня есть start-service.sh скрипт, который запускается до junit. Я обновил вопрос, в котором я получаю ошибку при использовании @SpringBootTest, @RunWith(SpringRunner.class) этих аннотаций. Не могли бы вы, пожалуйста, сообщить мне, как запустить контекст приложения, избежав ошибки.