Совместное использование данных магазина между расширениями в JUNIT5

Есть ли способ обмениваться данными между разными расширениями в JUNIT 5 с помощью store

Пример

public class Extension1{
     beforeAllCallback(){
          getStore(GLOBAL).put(projectId,"112");
     }
}

public class Extension2{
     beforeTestExecutionCallback(){
          System.out.println("projectId = "+getStore(GLOBAL).get(projectId));
     }
}

Очень быстрый беглый поиск в Интернете показывает, что лучшая практика для расширений Junit 5 - это без гражданства. Обмен данными между ними немедленно нарушает это. Я полагаю, что реальный вопрос в том, чего вы пытаетесь достичь этим?

Makoto 01.11.2018 16:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
937
1

Ответы 1

Да, два расширения могут совместно использовать состояние через Store следующим образом.

Обратите внимание, однако, что вы можете захотеть сохранить совместно используемое состояние в контексте кореньStore, если вы хотите, чтобы состояние было доступно для всех тестовых классов.

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.ExtensionContext.Namespace;

@ExtendWith({ Extension1.class, Extension2.class })
public class Tests {

    @Test
    void test() {
        // executing this results in the following being printed to SYS_OUT.
        // PROJECT_ID=112
    }
}

class Extension1 implements BeforeAllCallback {

    public static final String PROJECT_ID = Extension1.class.getName() + ".PROJECT_ID";

    @Override
    public void beforeAll(ExtensionContext context) throws Exception {
        context.getStore(Namespace.GLOBAL).put(PROJECT_ID, "112");
    }
}

class Extension2 implements BeforeTestExecutionCallback {

    @Override
    public void beforeTestExecution(ExtensionContext context) throws Exception {
        System.out.println("PROJECT_ID = " + context.getStore(Namespace.GLOBAL).get(Extension1.PROJECT_ID));
    }
}

Другие вопросы по теме