java - 如何使用 Spring Boot 应用程序和 Spock 测试在运行时更改服务器端口
问题描述
我正在使用 Spock 测试 Spring Boot 应用程序,但是在其中一个测试用例中,我需要模拟或存根对身份验证服务器的调用(使用 oauth 2),因此我试图将请求重定向到虚拟服务器进行测试和使方法返回一个固定的令牌。但是,我在运行时覆盖了端口,但由于虚拟服务器位于固定端口(从application-test.yml
.上?这是我的setup
功能:
`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:4321
always,这不是 Spring 拾取的随机端口
解决方案
您可以将随机端口注入您的测试。
例如使用@LocalManagementPort:
@LocalManagementPort
int port;
或者直接使用@Value:
@Value("${local.server.port}")
int port;
但如果上述方法不起作用,那么我相信这是你最后的手段:
int port = context.embeddedServletContainer.port
注入后,您可以在该端口上对服务器执行 GET。
推荐阅读
- syncfusion - 同步融合图表工具提示模板未获取点的 x 和 y 值
- vim - 如何告诉 vim 默认使用特定的 SQL 方言以进行语法突出显示?
- django - 使用 include 从我的 django 应用程序中导入所有 url
- javascript - chart.js typeError t is undefined and Uncaught TypeError: Cannot read property 'fontSize' of undefined
- python - Selenium 访问 div 标签中的文本
- javascript - Angular 7 - 错误错误:未捕获(承诺):TypeError:无法读取未定义的属性'forEach'
- gradle - 如何使用gradle访问artifactory中trunk文件夹中的jar
- node.js - EventEmitter 和 CustomEvent 的问题
- c# - Asp .net core WebApi 将外键 ID 作为值返回
- mysql - 在mysql中加入两个选择查询