如何为 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)

,现在可以正常使用了。