Как указать конкретный номер порта для Spring WebTestClient

#spring #spring-webclient #webtestclient

#spring #spring-webclient #webtestclient

Вопрос:

У меня есть локально работающая конечная точка rest, с которой я пытаюсь связаться с помощью Spring WebClient. В качестве первого шага для целей тестирования я пытаюсь использовать Spring WebTestClient. Моя локальная конечная точка rest работает на определенном порту (скажем, 8068). Я предполагаю, что, поскольку порт исправлен, я должен использовать:

 SpringBootTest.WebEnvironment.DEFINED_PORT
  

, а затем каким-то образом указать, какой этот порт находится в моем коде. Однако я не знаю, как это сделать. По умолчанию он равен 8080. Вот важные части моего кода:

 @RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SpringWebclientApplicationTests {

@Autowired
private WebTestClient webTestClient;

@Test
public void wcTest() throws Exception {

    String fullUri = "/services/myEndpoint/v1?userIds=jsmithamp;objectType=DEFAULT";

    WebTestClient.ResponseSpec responseSpec1 = webTestClient.get().uri(fullUri, "").exchange().expectStatus().isOk();
}
  

Ожидается, что этот тест вернет «200 OK», но возвращает «404 NOT_FOUND». Запрос, показанный в ответе об ошибке, является:

 GET http://localhost:8080/services/myEndpoint/v1?userIds=jsmithamp;objectType=DEFAULT
  

очевидно, потому, что по умолчанию он равен 8080, а мне нужно, чтобы он был 8068. Я был бы признателен всем, кто может объяснить, как правильно определить порт. Спасибо.

Ответ №1:

Я понял это. Я не верю, что вы должны использовать

 SpringBootTest.WebEnvironment.DEFINED_PORT
  

если только конечная точка не прослушивает 8080. В моем случае, поскольку мне нужно было использовать номер порта, который я не мог контролировать, я сделал это вместо этого:

 @RunWith(SpringRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SpringWebclientApplicationTests {

    private WebTestClient client;

    @Before
    public void setup() {
        String baseUri = "http://localhost:"   "8079";
        this.client = WebTestClient.bindToServer().baseUrl(baseUri).build();
    }

    @Test
    public void wcTest() throws Exception {

    String fullUri = "/services/myEndpoint/v1?userIds=jsmithamp;objectType=DEFAULT";
    WebTestClient.ResponseSpec responseSpec1 = client.get().uri(fullUri, "").exchange().expectStatus().isOk();
    }
}
  

, где я создаю экземпляр webtestclient локально, используя метод bindToServer, а не как автоматически подключаемый компонент, и удаляю:

 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
  

, так что теперь он работает нормально.