当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring Boot应用程序和spock测试在运行时更改服务器端口

闾丘玺
2023-03-14

我正在用Spock测试一个Spring Boot应用程序,但是在其中一个测试案例中,我需要模拟或存根对身份验证服务器的调用(使用oauth 2),所以我试图将请求重定向到一个虚拟服务器进行测试,并使方法返回一个固定的代币。但是,我在运行时覆盖端口,但我得到一个错误,因为虚拟服务器是在一个固定的端口(从application-test.yml读取),有没有办法在运行时改变这一点,使服务器匹配随机运行测试的端口?这是我的安装函数:

`def setup() {
        omcService.soapClient = Stub(SOAPClient)
        String url = "http://localhost:${port}"
        nonRetryableExceptionProcessor.omsUrl = url
        omsService.omsUrl = url
        omsService.authUrl = "$url/oauth/token?scope=all"
        omsService = Spy(OmsService)
        producerTemplate.start()
    }

当我调试这个测试时,属性被更改,但是当应用程序执行GET操作时,它总是指向localhost:4321always,这不是Spring拾取的随机端口

共有1个答案

骆昊阳
2023-03-14

您可以将随机端口注入测试。

例如使用@LocalManagementPort:

    @LocalManagementPort
    int port;

或者直接使用@Value:

    @Value("${local.server.port}")
    int port;

但如果上述方法无效,那么我相信这是你最后的选择:

    int port = context.embeddedServletContainer.port

注入后,您可以在该端口上执行对服务器的访问。

 类似资料: