Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Geb配置中使用Spring引导的动态端口_Java_Spring_Groovy_Spring Boot_Geb - Fatal编程技术网

Java 在Geb配置中使用Spring引导的动态端口

Java 在Geb配置中使用Spring引导的动态端口,java,spring,groovy,spring-boot,geb,Java,Spring,Groovy,Spring Boot,Geb,Spring Boot的测试框架有一个选项,可以选择一个随机端口,用于使用服务器运行测试。端口:0',但是我想用它在我的GebConfig.groovy中设置baseUrl。有没有办法从ConfigSlurper中访问动态端口号?只需在基本规范中覆盖GebSpec.createConf(): @Value("${local.server.port}") int port Configuration createConf() { def configuration = super.cre

Spring Boot的测试框架有一个选项,可以选择一个随机端口,用于使用
服务器运行测试。端口:0'
,但是我想用它在我的
GebConfig.groovy
中设置
baseUrl
。有没有办法从ConfigSlurper中访问动态端口号?

只需在基本规范中覆盖
GebSpec.createConf()

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

Configuration createConf() {
    def configuration = super.createConf()
    configuration.baseUrl = "http://localhost:$port"
    configuration
}

此动态端口号存储在哪里?此动态端口将仅存储在spring
环境中。我从未使用过groovy或geb,但是通过@sodik将这个端口号从spring传递给groovy有意义吗?@sodik没有明显的方法可以从配置脚本中获取对spring环境或上下文的引用。对不起,我以为您正在将geb与junit一起使用(因为我对它不是很熟悉,对我来说并不明显)。如果您的spring应用程序和geb完全独立,它可以为您自己选择一个端口,然后将其传递给spring(和geb),或者如果您使用引导执行器,则可以使用
env
endpoint。spring应用程序和测试线束不是独立的;Spring运行一个可供测试框架访问的捕获应用程序上下文(在我的例子中,我将Spock与JUnit runner一起使用)。整个练习的重点是避免自己选择端口,因为Spring Boot可以为我选择端口,并避免碰撞。这并不像我希望的那样干净,但它基本上是有效的
createConf
不会为
Browser.drive
调用,但它似乎可以与页面对象一起使用。为什么它不像您希望的那样干净?您无法在GebConfig.groovy中获得该值,因为该值在全局上下文中不可用,但可注入。为什么在测试中使用Browser.drive{}?另一种选择是在setup()中设置一个系统属性,然后在GebConfig.groovy中读取它,但对我来说,它不如我的第一个解决方案干净,因为您依赖于setup()方法设置的全局状态。没有那么干净,因为我必须扩展基类,而不是外部化配置。
GebConfig
脚本的执行上下文可以提供对Spring上下文的访问,但这需要上游集成,这可能不值得纠缠。(由于一些执行顺序问题,静态holder模式不起作用。)