5

Sto cercando di capire come compilare i test di integrazione su un'applicazione Spring Boot che utilizza Eureka. Dire che ho un testTest di avvio Servizio di avvio a molla con servizi 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))); 

    } 
} 

e ho nel mio percorso di codice per quella chiamata API:

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

Questa volontà NPE. Il discoveryClient viene restituito come null. Il codice funziona correttamente se avvio direttamente l'app di avvio Spring e utilizzo l'API personalmente. Non ho un utilizzo specifico del profilo da nessuna parte. C'è qualcosa di speciale in Eureka che devo configurare affinché il client di scoperta possa essere costruito per i test?

+2

C'è un motivo non si può/non si vuole eseguire il test con ' @ IntegrationTest' come [qui] (https://github.com/spring-cloud-samples/eureka/blob/master/src/test/java/eurekademo/ApplicationTests.java)? –

+0

Sì .. hai ragione. Potrei usare '@ IntegrationTest' o' @ WebIntegrationTest'. Non riesci a tenere il passo con tutte queste nuove annotazioni! Risolve il problema perfettamente. Risponderò e modificherò il codice per gli altri. – RubesMN

risposta

6

Grazie a @Donovan che ha risposto nei commenti. Ci sono annotazioni create da Phillip Web e Dave Syer nel pacchetto org.springframework.boot.test di cui non ero a conoscenza. Volevo fornire una risposta con il codice modificato. Modificare le annotazioni di classe a:

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

o se si sta utilizzando avvio di primavera 1.2.1 e una maggiore

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

Questo risolve l'avvio, ma come si forniscono gli URL del sistema circostante in questo client eureka simulato? –