我的应用程序使用的是Spring Boot 1.5。在集成测试中,我希望获取web服务器的运行时端口号(注意:TestRestTemplate在我的情况下并不有用)。我尝试过几种方法,但似乎没有一种有效。以下是我的方法。
第一种方法
@SpringBootTest(classes = TestConfig.class, webEnvironment =WebEnvironment.DEFINED_PORT)
public class RestServiceTest {
@LocalServerPort
protected int port;
在我的< code > src/main/resources/config/application . properties 文件中,我将服务器端口定义为
server.port = 8081
但有了这段代码,我就错了
无法解析值"${local.server.port}"中的占位符local.server.port
第二种方法
我变了
webEnvironment =环境。已定义_端口
到
网络环境 =WebEnvironment.RANDOM_PORT
在我的 src/main/resources/config/application.properties
文件中,我已经定义了
server.port = 0
这将引发与第一种方法相同的错误。
第三种方法
在第三种方法中,我尝试使用
protected int port;
@Autowired
Environment environment
this.port = this.environment.getProperty("local.server.port");
这将返回空
值
第四种方法
最后,我尝试使用ApplicationEvents
通过创建一个事件侦听器来查找端口号,以侦听EmbeddedServletContainerIntialize
@EventListener(EmbeddedServletContainerInitializedEvent.class)
public void onApplicationEvent(EmbeddedServletContainerInitializedEvent event) {
this.port = event.getEmbeddedServletContainer().getPort();
}
public int getPort() {
return this.port;
}
将相同的内容添加到测试配置
现在,在我的测试类中,我尝试使用此侦听器获取端口
@SpringBootTest(classes = TestConfig.class, webEnvironment =WebEnvironment.RANDOM_PORT)
public class RestServiceTest {
protected int port;
@Autowired
EmbeddedServletContainerIntializedEventListener embeddedServletcontainerPort;
this.port = this.embeddedServletcontainerPort.getPort();
这将返回0
。此外,我发现监听器事件从未被触发。
在文档和其他帖子中,这是非常直接的,但不知何故,它对我不起作用。非常感谢帮助。
您忘记在类装饰上方放置@RunWith(SpringRunner.class)
。
那么,试试这个。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfig.class, webEnvironment =WebEnvironment.DEFINED_PORT)
public class RestServiceTest {
@LocalServerPort
int randomServerPort;
...
}
我在使用 spring boot 1.4 的应用程序上遇到了同样的问题,发现 EmbeddedServletContainerInitializedEvent
的事件有点延迟 - 这意味着它在我的 bean 初始化后被触发 - 所以为了解决这个问题,我需要在需要使用端口的 bean 上使用惰性注释,例如 RestClient bean,它可以工作。例:
@Bean
@Lazy(true)
public RESTClient restClient() {
return new RESTClient(URL + port)
}
也许您忘记了为您的测试web环境配置随机端口。
这应该可以做到:@SpringBootTest(webEnvironment=webEnvironment.RRANDOM_PORT)
下面是刚刚使用Spring Boot 1.5.2成功执行的测试:
import static org.hamcrest.Matchers.greaterThan;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class RandomPortTests {
@Value("${local.server.port}")
protected int localPort;
@Test
public void getPort() {
assertThat("Should get a random port greater than zero!", localPort, greaterThan(0));
}
}
我正在用Apache Camel路由为Spring Boot应用程序创建一些单元测试,使用Spock作为测试框架,我需要模拟来自另一个应用程序的响应。我为此制作了一个模拟控制器,但我需要将测试正在运行的端口注入一个属性。有没有方法获得测试正在运行的端口? 我试过 另外,是否有方法在文件中注入该随机端口?理想情况下,我需要在文件中执行以下操作: 其中端口是运行测试的随机端口。
通过设置本地计算机、开发服务器、中间服务器或生产服务器作为测试服务器,测试动态网页或内容。 如果您计划使用服务器端语言(如 PHP)开发动态页,请设置一个测试服务器以便在您进行操作时生成并显示动态内容。 测试服务器可以是本地计算机、开发服务器、中间服务器或生产服务器。 要详细了解测试服务器的用途,请参阅 David Powers 的文章 Setting up a local testing ser
问题内容: 我有去grpc服务。我正在开发Mac,塞拉利昂。在本地针对服务运行grpc客户端时,一切都很好,但是在Docker容器中针对相同服务运行相同的客户端时,出现此错误: 这是我的docker文件: 我的命令来建立图像: 我的命令启动Docker容器: 其他资讯: 客户端程序可以在Docker容器中正常运行 连接到常规的休息端点可以正常工作(http2,与grpc相关吗?) 在OS X中运行
我有go grpc服务。我在mac电脑上开发,塞拉。当针对本地服务运行grpc客户机时,一切都很好,但当针对docker容器中的相同服务运行相同客户机时,我会出现以下错误: 下面是我的服务器代码片段:
我正在开发一个android和iOS应用程序,需要有一个RESTful服务器端。直到今天,我在eclipse上使用Jersey和RunJettyRun,但我决定开始使用新的更好的东西!我搬到了DropWizard和IntelliJ IDEA 这些是我安装的软件和我已经处理的事情:-Java 8-Maven 3.1.1-Maven和Java的环境变量。 现在,我所做的是跟随他们网站上的DropWiz
问题内容: 我正在尝试从本地网络服务器访问Active Directory。为此,我使用了最新版本的xampp和一个名为adLDAP的PHP脚本。如果我理解正确,则需要启用SSL才能访问https URL。我试着用谷歌搜索它,但是没有运气:(任何人都可以链接教程或向我解释如何在xampp / apache上为Windows 7 64bit安装SSL吗? 问题答案: Apache部分-使您能够打开h