Sie eine spock Konfigurationsdatei verwenden können.
erstellen Anmerkungen für die beiden Arten von Tests - @Local
und @PreProd
, zum Beispiel in Groovy:
import java.lang.annotation
@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE, ElementType.METHOD])
@Inherited
public @interface Local {}
Der nächste Schritt ist Ihre Spezifikationen entsprechend mit Anmerkungen versehen, zum Beispiel:
@Local
class SpecificationThatRunsLocally extends GebSpec { ... }
Dann erstellen eine SpockConfig.groovy
Datei neben Ihrer GebConfig.groovy
Datei mit folgendem Inhalt:
def gebEnv = System.getProperty("geb.env")
if (gebEnv) {
switch(gebEnv) {
case 'local':
runner { include Local }
break
case 'pre-prod':
runner { include PreProd }
break
}
}
EDIT: Es sieht so aus, als ob Grails seinen eigenen Test-Runner verwendet, was bedeutet, dass SpockConfig.groovy nicht berücksichtigt wird, wenn die Spezifikationen von Grails ausgeführt werden. Wenn Sie es benötigen, um unter Grails zu arbeiten, dann sollten Sie @ IgnoreIf/@ Require eingebaute Spock-Erweiterung Anmerkungen verwenden.
Erstellen Sie zuerst eine Closure-Klasse mit der Logik, wann eine bestimmte Spezifikation aktiviert werden soll. Sie könnten die Logik direkt als Abschlussargument für die Erweiterungs-Annotationen verwenden, aber es kann lästig werden, diesen Code überall zu kopieren, wenn Sie viele Spezifikationen kommentieren möchten.
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'
}
}
Und dann Ihre Angaben mit Anmerkungen versehen:
@Requires(Local)
class SpecificationThatRunsLocally extends GebSpec { ... }
@Requires(PreProd)
class SpecificationThatRunsInPreProd extends GebSpec { ... }
Dank erdi für Sie Antwort, aber wie erstelle ich Anmerkungen bitte, tun Sie Beispiele haben? Tx – ErEcTuS
Siehe meine aktualisierte Antwort – erdi
erdi, meine SockConfig ist nicht von meiner Grails-Anwendung "gesehen" .. und ich legte es auf das gleiche Paket wie gebConfig. Während des Debuggens wird der Code innerhalb von spockconfig niemals erreicht. – ErEcTuS