당신은 스팍 설정 파일을 사용할 수
나는 내 GebConfig에 구성되어 있는지, 여러 환경을 가지고있다.
@Local
class SpecificationThatRunsLocally extends GebSpec { ... }
하는 것은 다음 만들기 :
import java.lang.annotation
@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE, ElementType.METHOD])
@Inherited
public @interface Local {}
다음 단계는 예를 들어, 그에 따라 사양에 주석을 달 수 있습니다 : 그루비 예를 들어 @Local
및 @PreProd
-
시험의 두 가지 유형에 대한 주석 만들기 다음 내용을 당신의 GebConfig.groovy
파일 옆에 SpockConfig.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에에서 사양을 실행할 때 SpockConfig.groovy이 고려되지 않음을 의미 자체 테스트 주자 사용 Grails는 것 같습니다. Grails에서 작동하려면 @ IgnoreIf/@ Require 내장 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