如何为 Spring WebTestClient 指定特定的端口号
How to specify a specfic port number for Spring WebTestClient
我有一个本地 运行 休息端点,我正尝试使用 Spring WebClient 与之通信。作为测试目的的第一步,我正在尝试使用 Spring WebTestClient。我的本地休息端点在特定端口上运行(比如说 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=jsmith&objectType=DEFAULT";
WebTestClient.ResponseSpec responseSpec1 = webTestClient.get().uri(fullUri, "").exchange().expectStatus().isOk();
}
此测试预期 return“200 OK”,但 returns“404 NOT_FOUND”。错误响应中显示的请求是:
GET http://localhost:8080/services/myEndpoint/v1?userIds=jsmith&objectType=DEFAULT
,显然是因为它默认为8080,我需要它是8068。我将不胜感激任何可以解释正确定义端口的人。谢谢
我明白了。我不相信你应该使用
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=jsmith&objectType=DEFAULT";
WebTestClient.ResponseSpec responseSpec1 = client.get().uri(fullUri, "").exchange().expectStatus().isOk();
}
}
,其中我使用 bindToServer 方法在本地实例化 webtestclient,而不是作为自动装配的 bean,并删除:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
,现在可以正常使用了。
我有一个本地 运行 休息端点,我正尝试使用 Spring WebClient 与之通信。作为测试目的的第一步,我正在尝试使用 Spring WebTestClient。我的本地休息端点在特定端口上运行(比如说 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=jsmith&objectType=DEFAULT";
WebTestClient.ResponseSpec responseSpec1 = webTestClient.get().uri(fullUri, "").exchange().expectStatus().isOk();
}
此测试预期 return“200 OK”,但 returns“404 NOT_FOUND”。错误响应中显示的请求是:
GET http://localhost:8080/services/myEndpoint/v1?userIds=jsmith&objectType=DEFAULT
,显然是因为它默认为8080,我需要它是8068。我将不胜感激任何可以解释正确定义端口的人。谢谢
我明白了。我不相信你应该使用
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=jsmith&objectType=DEFAULT";
WebTestClient.ResponseSpec responseSpec1 = client.get().uri(fullUri, "").exchange().expectStatus().isOk();
}
}
,其中我使用 bindToServer 方法在本地实例化 webtestclient,而不是作为自动装配的 bean,并删除:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
,现在可以正常使用了。