Существует ли полный пример расширения JUnit 5, демонстрирующий правильный способ поддержания состояния (например, WebServerExtension.java из руководства)

Основной пример WebServerExtension из руководства JUnit5 является неполным и не полностью показывает, как правильно хранить конфигурацию (например, enableSecurity, URL-адрес сервера).

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

В примере игнорируются или жестко кодируются значения. Руководство (раздел 5.11. Сохранение состояния в расширениях) подразумевает, что следует использовать "Store", но ExtensionContext еще не доступен при создании объекта - неясно, как обрабатывать перенос этих данных в Store как ExtensionContext еще не доступен в конструкторе.

Также мне не ясно, что использование API-интерфейса Store для программного примера WebServerExtension даже желательно, и, возможно, он может работать только с использованием внутреннего состояния (например, this.serverUrl, this.enableSecurity и т. Д.).

Может быть, Store больше подходит для расширений, которые не используют этот "программный" стиль, где могут существовать несколько экземпляров пользовательского расширения (соответственно)? Другими словами, мне не понятно из руководства, является ли эта парадигма поддерживаемой или нет?

Другие примеры расширений JUnit 5 в Интернете (например, org.junit.jupiter.engine.extension.TempDirectory) показывают, как использовать аннотации для обработки передачи информации о конфигурации в Store, но было бы неплохо, если бы существовал полный пример типа программного компоновщика, такой как WebServerExtension.,

Такие примеры, как TempDirectory, явно имеют доступ к ExtensionContext из методов beforeXXX(), а пример 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 ответов

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