#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)
этих аннотаций. Не могли бы вы, пожалуйста, сообщить мне, как запустить контекст приложения, избежав ошибки.