#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)
.