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

标签 java spring-boot spring-cloud service-discovery netflix-eureka

我正在尝试弄清楚如何在使用 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 来构建测试吗?

最佳答案

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

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

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

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

关于java - 使用 Eureka 服务集成测试 Spring Boot 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30362656/

相关文章:

java - 线程中的异常 "AWT-EventQueue-0"java.lang.ArrayIndexOutOfBoundsException : 0 when trying to compare a string to a string array in Hangman game

java - 如何在 lib 文件夹中创建一个包含所有依赖项的 Netbeans 样式的 Jar?

java - 如何解析 <*> 的证书与任何主题备用名称 : [*]? 不匹配

java - Spring Boot 类路径

spring-cloud - Spring Cloud Zuul 网关 401 基础认证

spring - 使用 SB 2.4 禁用 Consul 进行集成测试

spring-security - 带有 Keycloak 服务器的 Zuul 反向代理

rest - type=Not Acceptable, status=406 Spring Rest 生成 XML 时出错

java - 使用 OneToMany 的 Spring Boot JPA 自定义查询

spring - 如何使用 Spring 选择性地禁用 Eureka 发现客户端?