Я несколько раз царапаю голову.Как инициализировать компонент с @RefreshScope из тестов интеграции Spring Boot?
Spring Cloud Netflix autoconfigures клиент Eureka. Следующий фрагмент из источников EurekaClientAutoConfiguration.
@Bean(destroyMethod = "shutdown")
@ConditionalOnMissingBean(value = EurekaClient.class, search = SearchStrategy.CURRENT)
@org.springframework.cloud.context.config.annotation.RefreshScope
@Lazy
public EurekaClient eurekaClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig config, EurekaInstanceConfig instance) {
applicationInfoManager.getInfo(); // force initialization
return new CloudEurekaClient(applicationInfoManager, config,
this.optionalArgs, this.context);
}
Этот компонент будет инициализирован только тогда, когда приложение Spring Boot запускает событие приложения.
Учитывая, что я запускаю интеграционные тесты JUnit, такого рода событий не произойдет.
Здесь модульного тестирования:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ReferentialClientTest.class)
public class InstrumentClientIT {
@Resource
private InstrumentClient instrumentClient;
@Test
public void testInstrumentClient() {
instrumentClient.findOne(455540l).getName();
}
}
InstrumentClient является клиентом Фейн, который зависит от EurekaClient.
Вот тестовый класс конфигурации.
@EnableFeignClients
@EnableDiscoveryClient
@EnableAutoConfiguration
public class ReferentialClientTest {
public static void main(String[] args) {
SpringApplication.run(ReferentialClientTest.class, args);
}
}
Как я могу убедиться, что EurekaClient правильно инициализирован без проводки его в мой интеграционный тест? (Это единственная работа, которую я нашел еще).
Вы пытались аннотировать свой тестовый класс с помощью '@ WebAppConfiguration', он гарантирует, что Spring загрузит контекст веб-приложения для вашего теста. '@ SpringApplicationConfiguration' по-видимому не подразумевает это по умолчанию. Я мог ошибаться, поэтому я не представил это как реальный ответ. –
И мы получили себя победителем! '@ WebAppConfiguration' не работал. Но '@ WebIntegrationTest' сделал трюк! Наконец, я могу понять эту аннотацию! Просто дайте объяснение ответа, и я его приму;) спасибо! –