Есть ли способ обмениваться данными между разными расширениями в JUNIT 5 с помощью store
Пример
public class Extension1{
beforeAllCallback(){
getStore(GLOBAL).put(projectId,"112");
}
}
public class Extension2{
beforeTestExecutionCallback(){
System.out.println("projectId = "+getStore(GLOBAL).get(projectId));
}
}




Да, два расширения могут совместно использовать состояние через 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));
}
}
Очень быстрый беглый поиск в Интернете показывает, что лучшая практика для расширений Junit 5 - это без гражданства. Обмен данными между ними немедленно нарушает это. Я полагаю, что реальный вопрос в том, чего вы пытаетесь достичь этим?