使用 Eureka 服务集成测试 Spring Boot 服务

Posted

技术标签:

【中文标题】使用 Eureka 服务集成测试 Spring Boot 服务【英文标题】:Integration Testing Spring Boot service using Eureka services 【发布时间】:2015-08-02 11:12:33 【问题描述】:

我试图弄清楚如何在使用 Eureka 的 Spring Boot 应用程序上构建集成测试。说我有一个测试

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class MyIntegrationTest 
  @Autowired
  protected WebApplicationContext webAppContext;

  protected MockMvc mockMvc;
  @Autowired
  RestTemplate restTemplate;

  @Before
  public void setup() 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
  

  @Test
  public void testServicesEdgeCases() throws Exception 

    // test no registered services
    this.mockMvc.perform(get("/api/v1/services").accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON))
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(jsonPath("$").value(jsonArrayWithSize(0)));

    

我的代码路径中有该 api 调用:

DiscoveryManager.getInstance().getDiscoveryClient().getApplications();

这将是 NPE。 discoveryClient 返回为 null。如果我直接启动 Spring Boot 应用程序并自己使用 API,则代码可以正常工作。我在任何地方都没有特定的个人资料使用情况。我需要为发现客户端配置一些特殊的 Wrt Eureka 以进行测试吗?

【问题讨论】:

您是否有理由不能/不想使用@IntegrationTest 像here 一样运行测试? 是的..你是对的。我可以使用@IntegrationTest@WebIntegrationTest。跟不上所有这些新注释!完美解决问题。我会为其他人回答和修改代码。 【参考方案1】:

感谢在 cmets 中回答的@Donovan。 Phillip Web 和 Dave Syer 在 org.springframework.boot.test 包中构建了我不知道的注释。想用更改后的代码提供答案。将类注释更改为:

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@IntegrationTest

或者如果您使用的是 spring boot 1.2.1 及更高版本

@WebIntegrationTest
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)

【讨论】:

这样就解决了启动问题,但是这个伪造的eureka客户端怎么提供周边系统的url呢?

以上是关于使用 Eureka 服务集成测试 Spring Boot 服务的主要内容,如果未能解决你的问题,请参考以下文章

:初探Spring Cloud Eureka+Hystrix+Ribbon+Feign微服务搭建

Spring Cloud Alibaba Spring Boot 微服务集成开发配置

spring cloud 2.x版本 Ribbon服务发现教程(内含集成Hystrix熔断机制)

Spring Cloud集成grpc

spring security oauth2认证中心 集成zuul网关的代码分析

Spring Boot集成Eureka