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

时间:2019-04-08 03:10:38

标签: 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节,在扩展中保持状态)暗示应使用“存储”,但在构造对象时ExtensionContext尚不可用-它尚不清楚如何将这些数据作为ExtensionContext迁移到存储中尚未在构造函数中提供。

对我来说还不清楚,对于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);
        }
      }
    }

谢谢!

0 个答案:

没有答案