Można użyć pliku konfiguracyjnego Spock.
Tworzenie adnotacji dla dwóch typów testów - @Local
i @PreProd
, na przykład w Groovy:
import java.lang.annotation
@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE, ElementType.METHOD])
@Inherited
public @interface Local {}
Następnym krokiem jest opisywanie swoich specyfikacje odpowiednio, na przykład:
@Local
class SpecificationThatRunsLocally extends GebSpec { ... }
następnie utworzyć plik SpockConfig.groovy
obok pliku GebConfig.groovy
o następującej treści:
def gebEnv = System.getProperty("geb.env")
if (gebEnv) {
switch(gebEnv) {
case 'local':
runner { include Local }
break
case 'pre-prod':
runner { include PreProd }
break
}
}
EDYCJA: Wygląda na to, że Grails używa własnego testera, co oznacza, że SpockConfig.groovy nie jest brany pod uwagę podczas uruchamiania specyfikacji z Grails. Jeśli potrzebujesz go do pracy pod Grails, powinieneś użyć @ IgnoreIf/@ Require wbudowanych adnotacji rozszerzenia Spock.
Najpierw utwórz klasę zamknięcia z logiką, kiedy dana specyfikacja ma być włączona. Możesz umieścić logikę bezpośrednio jako argument zamknięcia dla adnotacji rozszerzeń, ale denerwujące może być kopiowanie tego kodu w całym miejscu, jeśli chcesz opisywać wiele specyfikacji.
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'
}
}
A potem opisywanie swoich Specyfikacja:
@Requires(Local)
class SpecificationThatRunsLocally extends GebSpec { ... }
@Requires(PreProd)
class SpecificationThatRunsInPreProd extends GebSpec { ... }
Thanks Erdi Ci odpowiedzi, ale w jaki sposób tworzyć adnotacje proszę, masz przykłady? Tx – ErEcTuS
Zobacz moją zaktualizowaną odpowiedź – erdi
erdi, mój SockConfig nie jest "widziany" przez moją aplikację grails i umieściłem go w tym samym pakiecie co gebConfig. Podczas debugowania kod wewnątrz spockconfig nigdy nie został osiągnięty – ErEcTuS