0

几个小时以来,我一直在挠头。

Spring Cloud Netflix 自动配置一个 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 应用程序触发应用程序事件时,才会初始化此 bean。

考虑到我正在运行 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 的 Feign 客户端。

这是测试配置类。

@EnableFeignClients
@EnableDiscoveryClient
@EnableAutoConfiguration
public class ReferentialClientTest {
    public static void main(String[] args) {
        SpringApplication.run(ReferentialClientTest.class, args);
    }
}

如何确保 EurekaClient 已正确初始化而不将其连接到我的集成测试中?(这是我发现的唯一解决方法)。

4

1 回答 1

3

因此,如发现的那样,您需要使用@WebIntegrationTest.

于 2016-03-15T17:31:03.223 回答