在 JUNIT5 中的扩展之间共享存储数据

wil*_*lly 0 java junit5

无论如何,我们是否可以使用 store 在 JUNIT 5 中的不同扩展之间共享数据

例子

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

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

Sam*_*nen 5

是的,两个扩展可以通过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));
    }
}
Run Code Online (Sandbox Code Playgroud)