5

Я пытаюсь выяснить, как строить интеграционные тесты на приложение загрузки Spring, которая использует Eureka. Скажем, у меня есть тестИнтеграция Тестирование службы Spring загрузки с помощью услуги 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))); 

    } 
} 

и у меня есть в моем пути кода для этого апи вызова:

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

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

+2

Есть причину, вы не можете/не хотите, чтобы запустить тест с ' @ IntegrationTest' как [здесь] (https://github.com/spring-cloud-samples/eureka/blob/master/src/test/java/eurekademo/ApplicationTests.java)? –

+0

Yup .. вы правы. Я мог бы использовать '@ IntegrationTest' или' @ WebIntegrationTest'. Не соглашайтесь со всеми этими новыми комментариями! Решает проблему отлично. Я отвечу и изменю код для других. – RubesMN

ответ

6

Благодаря @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}) 
+1

Это решает запуск, но как вы предоставляете URL-адреса окружающей системы в этом поддельном клиенте eureka? –

Смежные вопросы