Проблема потребительского тестирования Spring Cloud Contract
Я тестирую потребительскую сторону весеннего облачного контракта.
Поставщик находится здесь: https://github.com/pkid/spring-cloud-contract-with-surefire.
Jar-заглушки, сгенерированные из провайдера, находятся здесь: https://github.com/pkid/spring-cloud-contract-with-surefire-consumer/blob/master/sample-repo-service-1.0.0-SNAPSHOT-stubs.jar
Когда я запускаю потребительский тест (источник находится здесь: https://github.com/pkid/spring-cloud-contract-with-surefire-consumer):
@Test
public void shouldGiveFreeSubscriptionForFriends() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/greeting")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string("{\"id\":1,\"content\":\"Hello, World!\"}"));
}
Когда я делаю "mvn test", я вижу, что банка с заглушками правильно найдена и распакована. Однако я получил ошибку, что конечная точка 2 "/ приветствие" не существует (404).
Не могли бы вы мне помочь? Спасибо!
1 ответ
Ты используешь mockMvc
подключиться к экземпляру WireMock. Это не сработает. + Изменить mockMvc
на стороне потребителя к restTemplate
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
@AutoConfigureMockMvc
@AutoConfigureJsonTesters
@DirtiesContext
@AutoConfigureStubRunner(ids = {"com.sap.ngp.test:sample-repo-service:+:stubs:8080"}, workOffline = true)
public class ConsumerTest {
@Test
public void shouldGiveFreeSubscriptionForFriends() throws Exception {
ResponseEntity<String> result = new TestRestTemplate().exchange(RequestEntity
.get(URI.create("http://localhost:8080/greeting"))
.header("Content-Type", MediaType.APPLICATION_JSON_VALUE)
.build(), String.class);
BDDAssertions.then(result.getStatusCode().value()).isEqualTo(200);
BDDAssertions.then(result.getBody()).isEqualTo("{\"content\":\"Hello, World!\"}");
}
}
Пожалуйста, прочитайте, что макет mvc для документации в http://docs.spring.io/spring-security/site/docs/current/reference/html/test-mockmvc.html