2015-03-13 398 views
1

Spring Boot的測試框架可以選擇隨機端口進行測試,使用'server.port:0'The documentation suggests grabbing the port as a Spring @Value,但我想用它來設置我的GebConfig.groovy中的baseUrl。有沒有辦法從ConfigSlurper中訪問動態端口號?使用Spring Boot中的動態端口配置Geb配置

+0

哪裏是存儲在這個動態的端口號? – Opal 2015-03-13 08:41:18

+0

這個動態端口將只存儲在spring'Environment'中。我從來沒有使用groovy或geb,但它是有道理的,通過http://groovy.codehaus.org/gapi/groovy/util/ConfigSlurper.html#setBinding(java.util.Map )? – sodik 2015-03-13 09:02:42

+0

@sodik沒有明顯的方式從配置腳本中獲取Spring環境或上下文的引用。 – chrylis 2015-03-13 09:32:50

回答

1

只需覆蓋在基本規格GebSpec.createConf()

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

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

這不是我想要的那麼幹淨,但它大部分工作。 'createConf'不會被調用'Browser.drive',但它看起來像它可以處理頁面對象。 – chrylis 2015-03-15 03:10:00

+0

爲什麼它不像你想要的那麼幹淨?您無法在GebConfig.groovy中保留它,因爲該值在全局上下文中不可用,但是可注入。爲什麼你會在測試中使用Browser.drive {}?另一個選擇是在setup()中設置一個系統屬性,然後在GebConfig.groovy中讀取它,但是對於我來說它比我的第一個解決方案更不乾淨,因爲您依賴於從setup()方法設置的全局狀態。 – erdi 2015-03-15 08:52:04

+0

不那麼幹淨,因爲我必須擴展基類而不是外化配置。 「GebConfig」腳本的執行上下文可能提供對Spring上下文的訪問,但這需要上游集成,這可能不值得糾結。 (由於某些執行順序問題,靜態持有者模式不起作用。) – chrylis 2015-03-15 18:15:09