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

运行Spring Boot测试时访问配置类中的@LocalServerPort

岳奇逸
2023-03-14

我在我的< code>SpringBootTest中使用随机端口运行一个完整的SpringBoot应用程序。我可以通过使用注释< code>@LocalServerPort来检索测试类中的随机端口:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = {MyTest.LocalConfig.class})
public class MyTest {

  @LocalServerPort
  private Integer port;

不幸的是,我无法在我的< code>Configuration类中检索随机端口,我想在这里使用随机端口创建测试beans:

  @TestConfiguration
  public static class LocalConfig {

    @Bean
    public MyBean myBean(@Value("${local.server.port}") int port) {

在这里,我得到这个错误:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 
'local.server.port' in value "${local.server.port}"

共有1个答案

皇甫通
2023-03-14

多亏了knoobie,我才想出了这个解决方案:

@Lazy
@TestConfiguration
public static class LocalConfig {

  @Bean
  public MyBean myBean(@Value("${local.server.port}") int port) {

如果使用@Lazy,则可以访问Configuration类中local.server.port的值。

惰性配置类中的 Bean 最终将被实例化,因此端口在该阶段可用。

遗憾的是,无法将@Primary注释与@Lazy结合使用来覆盖 bean,因为@Primary注释的 bean 是在早期阶段实例化的。

 类似资料:
  • 我现在在运行spring boot测试时遇到了这个问题。我有一个带有vaadin和micro services配置的spring boot项目,当我运行测试用例时,在引擎盖后面会自动加载一些可自动配置的类,并且测试需要更多的时间来启动和运行。所以有没有什么方法可以避免加载可自动配置的类,这样我就可以快速启动我的项目。 我的要求是,我必须能够获得应用程序上下文,而不加载一堆自动可配置类。 我正在使用

  • 我希望能够选择配置类型。 我目前的“修复”是手动为gradle测试创建一个新的配置项。Intellij不够聪明,无法创建与Gralde测试相同的Junit测试。 我很困惑。

  • 本文向大家介绍SpringBoot配置web访问H2的方法,包括了SpringBoot配置web访问H2的方法的使用技巧和注意事项,需要的朋友参考一下 【前情提要】最近开始搭建博客,在本地调试的时候使用的数据库是h2,但是调试的时候需要查看数据库,本文也由此而来。 下面是我用到的方法: 使用IDEA的Database连接工具,具体操作方法就是按照要求配置连接url,用户名和密码即可。具体操作见下图

  • 问题内容: 根据测试运行的总体测试结果,我要执行条件拆卸。这意味着必须在执行完所有测试之后但离开测试运行程序之前,才能访问总体测试结果。我该如何实现? 问题答案: 我找不到合适的pytest挂钩来访问总体测试结果。 你不需要一个 自己收集测试结果。这是我需要批量访问测试结果时通常使用的蓝图: 现在所有测试结果都存储在dict下;用法示例: 运行测试将产生: 编辑: 如果总体退出代码()是足够的信息

  • 配置和运行本地单元测试 本地单元测试 本地单元测试用来执行那些对Android没有依赖或Android依赖容易mock的单元测试. 本地单元测试运行在自己电脑上,测试用例在本地虚拟机上编译运行,执行速度快. 本地单元测试写在app\/src\/test\/java目录下. 本地单元测试使用JUnit或TestNG测试框架. 使用的演示代码 这里使用Google官方开源的示例进行演示,地址:http

  • 我有几个繁重的Spring集成测试(是的,这不是最好的方法,我没有时间正确地模拟所有外部dep) 下面是测试的典型注释 由于以下原因,测试会定期失败: 这里有两个问题:1、让测试共存的正确方式是什么?我在surefire插件中设置了forkCount=0。好像有帮助 2.1. 在每次测试期间,我实际上不需要启动所有的