Как может значение члена класса из базового класса GebSpec - PullRequest
0 голосов
/ 06 октября 2018

В настоящее время я пытаюсь создать 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).

1 Ответ

0 голосов
/ 08 октября 2018

Самый простой способ для вас - записать sessionId в общий ThreadLocal, к которому может обратиться ваш слушатель и спецификация, в противном случае вам придется реализовать org.spockframework.runtime.extension.IMethodInterceptor, чтобы вы могли получить доступк фактическому экземпляру теста, чтобы извлечь значение поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...