5

Ich versuche herauszufinden, wie Integrationstests auf einer Spring Boot-Anwendung, die Eureka verwendet, zu erstellen. Sagen, dass ich einen TestIntegrationstest Spring Boot Service mit Eureka-Services

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

    } 
} 

und ich habe in meinem Code-Pfad für den API-Aufruf habe:

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

Dies wird NPE. Der discoveryClient wird als null zurückgegeben. Code funktioniert einwandfrei, wenn ich die Spring Boot App direkt starte und die API selbst benutze. Ich habe nirgendwo eine spezifische Profilnutzung. Gibt es etwas Spezielles für Eureka, das ich konfigurieren muss, damit der Discovery-Client zum Testen erstellt wird?

+2

Gibt es einen Grund, warum Sie nicht/nicht wollen Ihren Test laufen mit ' @ IntegrationTest wie [hier] (https://github.com/spring-cloud-samples/eureka/blob/master/src/test/java/eurekademo/ApplicationTests.java)? –

+0

Yup .. du hast Recht. Ich könnte '@ IntegrationTest' oder' @ WebIntegrationTest' verwenden. Kann nicht mit all diesen neuen Anmerkungen Schritt halten! Löst das Problem perfekt. Ich werde den Code für andere beantworten und ändern. – RubesMN

Antwort

6

Dank @Donovan, der in den Kommentaren antwortete. Es gibt Anmerkungen, die von Phillip Web und Dave Syer im org.springframework.boot.test Paket erstellt wurden, das ich nicht kannte. Wollte mit dem geänderten Code eine Antwort geben. Ändern Sie die Klasse Anmerkungen:

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

oder wenn Sie mit Federverschluß 1.2.1 und größer

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

Das löst den Start, aber wie stellen Sie die URLs des umgebenden Systems in diesem gefälschten Eureka-Client zur Verfügung? –