你可以使用一個斯波克配置文件。
import java.lang.annotation
@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE, ElementType.METHOD])
@Inherited
public @interface Local {}
下一步是相應註釋您的規格,例如:
@Local
class SpecificationThatRunsLocally extends GebSpec { ... }
然後Groovy創建@Local
和@PreProd
,例如 -
創建了兩種類型的測試註釋一個SpockConfig.groovy
文件旁邊的GebConfig.groovy
文件具有以下內容:
def gebEnv = System.getProperty("geb.env")
if (gebEnv) {
switch(gebEnv) {
case 'local':
runner { include Local }
break
case 'pre-prod':
runner { include PreProd }
break
}
}
編輯:它看起來像Grails是用它自己的測試運行,這意味着從Grails的運行規範時SpockConfig.groovy不考慮。如果你需要它在Grails下工作,那麼你應該使用@ IgnoreIf/@需要內置的Spock擴展註釋。
首先創建一個邏輯閉合類時,應啓用給定的規範進行。您可以直接將邏輯作爲閉包參數放入擴展註釋中,但如果您想註解很多規格,則可能會煩惱地將該位代碼複製到整個地方。
class Local extends Closure<Boolean> {
public Local() { super(null) }
Boolean doCall() {
System.properties['geb.env'] == 'local'
}
}
class PreProd extends Closure<Boolean> {
public PreProd() { super(null) }
Boolean doCall() {
System.properties['geb.env'] == 'pre-prod'
}
}
然後標註您的規格:
@Requires(Local)
class SpecificationThatRunsLocally extends GebSpec { ... }
@Requires(PreProd)
class SpecificationThatRunsInPreProd extends GebSpec { ... }
感謝ERDI對你的反應,但我如何創建註釋請,你有例子嗎? Tx – ErEcTuS
查看我的更新回覆 – erdi
erdi,我的SockConfig沒有被我的grails應用程序「看到」。我把它放在與gebConfig相同的包中。在調試的時候,spockconfig裏的代碼永遠不會到達 – ErEcTuS