是否有完整的 JUnit 5 扩展示例来演示维护状态的正确方法(例如指南中的 WebServerExtension.java)

Kir*_*sen 5 junit5 junit5-extension-model

JUnit5 手册中的主要WebServerExtension示例不完整,并且没有完全显示如何正确存储配置(例如,enableSecurity、服务器 url)。

https://github.com/junit-team/junit5/blob/master/documentation/src/main/java/example/registration/WebServerExtension.java

该示例忽略或硬编码这些值。手册(第 5.11 节。在扩展中保持状态)暗示应该使用“Store”,但在构造对象时 ExtensionContext 尚不可用——尚不清楚如何处理将此数据作为 ExtensionContext 迁移到 Store在构造函数中尚不可用。

我还不清楚,对于 WebServerExtension 编程示例使用 Store API 是否值得,也许它可以仅使用内部状态(例如 this.serverUrl、this.enableSecurity 等)来工作。

也许商店更适用于不使用这种“编程”风格的扩展,其中可能存在(适当地)自定义扩展的多个实例?换句话说,我从指南中不清楚这是否是受支持的范例?

其他在线 JUnit 5 扩展示例(例如 org.junit.jupiter.engine.extension.TempDirectory)展示了如何利用注释来处理将配置信息传递到 Store,但如果也有像 WebServerExtension 这样的完整编程构建器类型示例,那就太好了。

像 TempDirectory 这样的示例显然可以从 beforeXXX() 方法访问 ExtensionContext,而 WebServerExtension 示例则不能。

使用下面的方法似乎工作正常,但我想确认这是一个受支持的范例(即在使用这种编程方法时使用字段而不是商店)。

    public class WebServerExtension implements BeforeAllCallback {
      private final boolean securityEnabled;
      private final String serverUrl;
      public WebServerExtension(Builder builder) {
        this.securityEnabled = builder.enableSecurity;
        this.serverUrl = build.serverUrl;
      }   

      @Override
      public void beforeAll(ExtensionContext context) {
        // is it ok to use this.securityEnabled, this.serverUrl instead of Store API???
      }

      public String getServerUrl() {
        return this.serverUrl;
      }

      public boolean isSecurityEnabled() {
        return this.securityEnabled;
      }

      public static Builder builder() {
        return new Builder();
      }

      public static class Builder {
        private boolean enableSecurity;
        private String serverUrl;
        public Builder enableSecurity(boolean b) {
          this.enableSecurity = b;
          return this;
        }
        public Builder serverUrl(String url) {
          this.serverUrl = url;
          return this;
        }
        public WebServerExtension build() {
          return new WebServerExtension(this);
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!