Вы можете использовать файл конфигурации Спока.
Создание аннотаций для двух видов испытаний - @Local
и @PreProd
, например, в Groovy:
import java.lang.annotation
@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE, ElementType.METHOD])
@Inherited
public @interface Local {}
Следующий шаг заключается в аннотировать спецификации соответственно, например:
@Local
class SpecificationThatRunsLocally extends GebSpec { ... }
Затем создать a 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
}
}
EDIT: Похоже, что Grails использует собственный тестовый бегун, что означает, что SpockConfig.groovy не учитывается при выполнении спецификаций от Grails. Если вам нужно, чтобы он работал под Grails, вам следует использовать @ IgnoreIf/@ Требовать встроенные аннотации расширений Spock.
Сначала создайте класс Closure с логикой для того, когда данный параметр должен быть включен. Вы можете поместить логику непосредственно в качестве аргумента замыкания в аннотации расширения, но может раздражать, чтобы скопировать этот бит кода повсюду, если вы хотите комментировать многие спецификации.
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