Wiremock не издевается над запросом веб-клиента

#spring-boot #java-8 #junit5 #wiremock

#пружинный ботинок #java-8 #июнь5 #проволочный моток

Вопрос:

Я использую spring boot 2.5.7, java 8 и junit 5.

 lt;parentgt;  lt;groupIdgt;org.springframework.bootlt;/groupIdgt;  lt;artifactIdgt;spring-boot-starter-parentlt;/artifactIdgt;  lt;versiongt;2.5.7lt;/versiongt;  lt;relativePath /gt; lt;/parentgt;   lt;dependencygt;  lt;groupIdgt;org.springframework.bootlt;/groupIdgt;  lt;artifactIdgt;spring-boot-starter-testlt;/artifactIdgt;  lt;scopegt;testlt;/scopegt;  lt;/dependencygt;   lt;dependencygt;  lt;groupIdgt;org.springframework.cloudlt;/groupIdgt;  lt;artifactIdgt;spring-cloud-contract-wiremocklt;/artifactIdgt;  lt;versiongt;3.0.4lt;/versiongt;  lt;scopegt;testlt;/scopegt;  lt;/dependencygt;  

Мой класс интеграционного теста:

 @SpringBootTest(classes = MyTestApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) @AutoConfigureWireMock(port = 0) @DirtiesContext public class MyTestControllerTest {   @LocalServerPort  private int port;   @Autowired  private TestRestTemplate restTemplate;   @BeforeEach  void init() {  stubFor(post(urlPathEqualTo("http://localhost:8443/my-third-party-endpoint"))  .willReturn(aResponse()  .withStatus(200)  .withHeader("Content-Type", MediaType.APPLICATION_JSON.toString())  .withHeader("Accept", MediaType.APPLICATION_JSON.toString())  .withBody("{}")));  }   @Test  public void testAddEmployee() {  PartInspectionImageModel partInspectionImageModel = new PartInspectionImageModelProvider().createPartInspectionImageModel();   ResponseEntitylt;PartInspectionImageModelgt; responseEntity = this.restTemplate  .postForEntity("http://localhost:"   port   "/rest/my-test-endpoint", partInspectionImageModel, PartInspectionImageModel.class);   assertEquals(200, responseEntity.getStatusCodeValue());  } }  

Фрагмент кода, над которым будет издеваться wiremock внутри моего класса реализации:

 WebClient webClient = WebClient.create("http://localhost:8443");   Monolt;Stringgt; postPartInspectionImageModelToML = webClient.post()  .uri("/my-third-party-endpoint")  .contentType(MediaType.APPLICATION_JSON)  .accept(MediaType.APPLICATION_JSON)  .body(Mono.just(completeMlProcessingModel), CompleteMlProcessingModel.class)  .retrieve()  .bodyToMono(String.class);   String response = postPartInspectionImageModelToML.block();  

Из-за того, что это невозможно высмеять, тест не прошел на этапе postPartInspectionImageModelToML.block ().

Ошибка-это только:

Вызвано: java.net.ConnectException: Отказано в подключении: нет дополнительной информации

Ответ №1:

Вам нужно убедиться, что вы используете WireMock на порту 8443, если вы жестко http://localhost:8443 задаете базовый URL-адрес для своего WebClient .

С этого момента вы запускаете WireMock на случайном порту @AutoConfigureWireMock(port = 0) . Это также возможно, если вы динамически переопределяете базовый URL-адрес для своего веб-клиента, например, передавая его на аутсорсинг в значение конфигурации.

В противном случае попробуйте изменить его на @AutoConfigureWireMock(port = 8443) .