Интеграционное тестирование службы Spring Boot с использованием служб Eureka

Я пытаюсь понять, как создавать интеграционные тесты для приложения Spring Boot, использующего Eureka. Скажи, что у меня есть тест

@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();

Это будет НПЭ. DiscoveryClient возвращается как null. Код работает нормально, если я запускаю загрузочное приложение Spring напрямую и сам использую API. У меня нигде нет конкретного использования профиля. Есть ли что-то особенное для Eureka, что мне нужно настроить, чтобы клиент обнаружения был создан для тестирования?


person RubesMN    schedule 21.05.2015    source источник
comment
Есть ли причина, по которой вы не можете/не хотите запускать тест с @IntegrationTest, например здесь?   -  person Donovan Muller    schedule 21.05.2015
comment
Ага.. ты прав. Я мог бы использовать @IntegrationTest или @WebIntegrationTest. Не могу угнаться за всеми этими новыми аннотациями! Отлично решает проблему. Я отвечу и изменю код для других.   -  person RubesMN    schedule 21.05.2015


Ответы (1)


Спасибо @Donovan, который ответил в комментариях. В пакете org.springframework.boot.test есть аннотации, созданные Phillip Web и Dave Syer, о которых я не знал. Хотел дать ответ с измененным кодом. Измените аннотации класса на:

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

или если вы используете весеннюю загрузку 1.2.1 и выше

@WebIntegrationTest
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {Application.class})
person RubesMN    schedule 21.05.2015
comment
Это решает проблему запуска, но как указать URL-адреса окружающей системы в этом поддельном клиенте eureka? - person Patrick Cornelissen; 22.03.2016