#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)
, так что теперь он работает нормально.