В настоящее время я пытаюсь создать GlobalExtension
для моей платформы Geb-Spock.Итак, вот мое расширение:
class OnFailureListener extends AbstractRunListener {
private final String id
private final SauceREST sauceREST
public OnFailureListener(String id, String username, String accessKey) {
this.id = id
this.sauceREST = new SauceREST(username, accessKey)
}
def void error(ErrorInfo error) {
println error;
this.sauceREST.updateJobInfo(this.sessionIdProvider.getSessionId(), "failed")
}
}
class ResultExtension extends AbstractGlobalExtension {
protected final String username = System.getenv("SAUCE_USERNAME")
protected final String accesskey = System.getenv("SAUCE_ACCESS_KEY")
protected final String sessionId
@Override
void visitSpec(SpecInfo specInfo) {
specInfo.addListener(new OnFailureListener(sessionId, username, accesskey))
}
}
Моя проблема в том, что значение sesssionId
присваивается в базовом классе GebSpec
, который я использую для других спецификаций, и не может быть назначено непосредственно в расширении.учебный класс.Помимо использования некоторых грубых подходов к отражению, есть ли способ получить доступ к значению sessionId
, присвоенному базовому классу в расширении?Я также хотел бы избегать использования AnnotationExtension
, так как я хотел бы применять это глобально, не изменяя никакой код спецификации (аналогично шаблону JUnit TestWatcher
).