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?
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)? –
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