如何使用属性 server.port=0 运行 spock 测试时查找 Spring Boot 容器的端口

2023-11-24

鉴于此条目application.properties:

server.port=0

这会导致 Spring Boot 选择一个随机可用端口,并使用 spock 测试 Spring Boot Web 应用程序,spock 代码如何知道要访问哪个端口?

正常注入是这样的:

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

不适用于斯波克。


您可以使用以下代码找到端口:

int port = context.embeddedServletContainer.port

对于那些对 java 等价物感兴趣的人来说,这是:

int port = ((TomcatEmbeddedServletContainer)((AnnotationConfigEmbeddedWebApplicationContext)context).getEmbeddedServletContainer()).getPort();

这是一个可以扩展的抽象类,它包装了 Spring Boot 应用程序的初始化并确定端口:

abstract class SpringBootSpecification extends Specification {

    @Shared
    @AutoCleanup
    ConfigurableApplicationContext context

    int port = context.embeddedServletContainer.port

    void launch(Class clazz) {
        Future future = Executors.newSingleThreadExecutor().submit(
                new Callable() {
                    @Override
                    public ConfigurableApplicationContext call() throws Exception {
                        return (ConfigurableApplicationContext) SpringApplication.run(clazz)
                    }
                })
        context = future.get(20, TimeUnit.SECONDS);
    }
}

你可以这样使用:

class MySpecification extends SpringBootSpecification {
    void setupSpec() {
        launch(MyLauncher.class)
    }

    String getBody(someParam) {
        ResponseEntity entity = new RestTemplate().getForEntity("http://localhost:${port}/somePath/${someParam}", String.class)
        return entity.body;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用属性 server.port=0 运行 spock 测试时查找 Spring Boot 容器的端口 的相关文章

随机推荐

  • 删除 Fetch API 默认超时

    我使用 Google Chrome 或 Mozilla Firefox 的本机获取向我的服务器发送查询 fetch url method POST body formData credentials include 我设置了一个服务器在 3
  • 在 ElasticSearch 中返回部分嵌套文档

    我想搜索嵌套文档数组并仅返回符合特定条件的文档 映射示例如下 book properties title type string chapters type nested properties title type string lengt
  • angularjs:只允许在文本框中输入数字

    在 AngularJS 中 是否有任何可用功能只允许在文本框中输入数字like 此代码显示了如何防止输入非数字符号的示例 angular module app directive onlyDigits function return res
  • 问:回调的调用顺序是否与注册的顺序相同?

    我正在使用Q承诺图书馆 我的代码依赖于这样一个事实 单个 Promise 的回调按照注册的顺序执行 http jsfiddle net HgYtK 1 var deferred Q defer var promise deferred pr
  • android:name 中的前导点真的需要吗? [复制]

    这个问题在这里已经有答案了 可能的重复 注册活动时的 点 是什么意思 在所有 Android 示例中 活动 服务等名称均以点开头
  • 查看设备方向是否已锁定(检测是否启用/禁用自动旋转)

    如何查明设备的屏幕方向是否已锁定 我正在使用 OrientationEventListener 来触发我的应用程序内的一些操作 如果用户锁定了屏幕 我想禁用这些操作 我知道我通常可以这样定位 但如何找出这个锁定方向 int orientat
  • 神秘的形式(function(x){})$x

    物体是什么formals function x x 它存在于函数的形式中 绑定到没有默认值的参数 还有其他方法来引用这个奇怪的对象吗 除了表示空函数参数之外 它还有其他作用吗 以下是可以在控制台中检查的一些属性 gt is formals
  • Android 和桌面上 Java 下的 SVG 处理

    我正在尝试编写一个基于 XML 文件生成 SVG 图像的 Java 应用程序 该应用程序还应该能够显示 SVG 文件 我的应用程序应该在 Android 平台和台式电脑上运行 我读到过有关 Swing Batik 的内容 但据我所知 它在
  • Objective-C 中自定义对象的分组

    我有 Person 类的自定义对象数组 Person NSObject NSString firstName NSString lastName NSString age NSMutableArray personsArray NSMuta
  • #在C中定义一个元组

    我希望能够定义一个元组来表示其他宏所需的参数 我认为展示我想要的最好方法是展示一个例子 include
  • 如何将 InMemoryUploadedFile 对象复制到磁盘

    我试图捕获通过表单发送的文件 并在保存之前对其执行一些操作 所以我需要在临时目录中创建该文件的副本 但我不知道如何访问它 Shutil 的函数无法复制该文件 因为没有该文件的路径 那么有没有办法以其他方式执行此操作 我的代码 image f
  • 在 Android 上使用客户端/服务器证书进行双向身份验证 SSL 套接字

    我正在开发一个需要客户端和服务器证书身份验证的 Android 应用程序 我创建了一个 SSLClient 类 该类在常规桌面 Java SE 6 上运行良好 我已将其移至我的 Android 项目中 但收到以下错误 未找到 KeyStor
  • 在 R 包中将非 S3 基本函数重新定义为 S3 函数是一种不好的风格吗?

    所以我正在开发一个使用 S3 类的 R 包 如果我可以使用sample作为我的一门课的方法 然而 base已经声明了sample作为一个非S3功能 所以我想知道的是 重新定义非S3是不是不好的风格base函数如sample作为 S3 功能
  • CSS 过渡与可见性不起作用

    在下面的小提琴中 我分别对可见性和不透明度进行了转换 后者有效 但前者无效 此外 在可见性的情况下 过渡时间被解释为悬停时的延迟 在 Chrome 和 Firefox 中都会发生 这是一个错误吗 http jsfiddle net 0r21
  • 从c++程序调用python进行分发

    我想从我的 C 程序中调用 python 脚本文件 我不确定我将分发给的人是否安装了 python 我想从我的 C 程序中调用 python 脚本文件 这意味着您希望将 Python 嵌入到您的 C 应用程序中 正如中提到的将 Python
  • Jersey:JSON 对象列表

    我试图在我的 Jersey 实现资源类中检索对象的后集合 如下所示 POST Path send Consumes MediaType APPLICATION JSON Produces MediaType APPLICATION JSON
  • GSON 和 InstanceCreator 问题

    我有以下 POJO public interface Shape public double calcArea public double calcPerimeter public class Rectangle implement Sha
  • 发送带有个人资料图片的电子邮件 PHP 邮件功能

    当用户收到从我的网站使用 PHP 发送的电子邮件时 我想在用户收件箱中显示个人资料图片 在这张图片中 第一封电子邮件来自我的网站 第二封电子邮件是我想要的 这是我的 PHP 邮件函数 emailTo POST emialNewPass em
  • 如何在 Python 中按字母数字顺序获取下一个字符串?

    我需要一个简单的程序 给定一个字符串 按字母数字顺序 或仅按字母顺序 返回下一个字符串 f aaa aab f aaZ aba 等等 其中一个模块中是否已经有此功能 我认为没有内置函数可以做到这一点 以下应该有效 def next stri
  • 如何使用属性 server.port=0 运行 spock 测试时查找 Spring Boot 容器的端口

    鉴于此条目application properties server port 0 这会导致 Spring Boot 选择一个随机可用端口 并使用 spock 测试 Spring Boot Web 应用程序 spock 代码如何知道要访问哪