Class TestDropwizardAppExtension

All Implemented Interfaces:
org.junit.jupiter.api.extension.AfterAllCallback, org.junit.jupiter.api.extension.AfterEachCallback, org.junit.jupiter.api.extension.BeforeAllCallback, org.junit.jupiter.api.extension.BeforeEachCallback, org.junit.jupiter.api.extension.Extension, org.junit.jupiter.api.extension.ParameterResolver, org.junit.jupiter.api.extension.TestInstantiationAwareExtension

public class TestDropwizardAppExtension extends GuiceyExtensionsSupport
TestDropwizardApp junit 5 extension implementation. Normally, extension should be activated with annotation, but in some cases manual registration may be used:
@RegisterExtension
 static TestDropwizardAppExtension app = TestDropwizardAppExtension.forApp(MyApp.class).create()
 
Registration in static field is complete equivalent of annotation declaration! When registered in non-static field, application would be started for each test method.

Reasons why it could be used instead of annotation:

  • Incorrect execution order with some other extensions. Manually registered extension will execute after(!) all class level registrations (junit native behaviour). So moving guicey extension to manual registration may guarantee its execution after some other extension.
  • Manual registration allows short hook declarations with lambdas: .hooks(builder -> builder.modules(new DebugGuiceModule()))
  • Config overrides registration as ConfigOverride objects (required for delayed evaluated values: e.g. when it is obtained from some other junit extension)
  • Per-method application startup (for non-static field)

You can't use manual registration to configure multiple applications because junit allows only one extension instance (if you really need to use multiple applications in tests then register one with extension and for another use DropwizardTestSupport or TestSupport utility).

If both declarations will be used at the same class (don't do that!) then annotation will win and manual registration will be ignored (junit default behaviour).

Other extensions requiring access to dropwizard application may use GuiceyExtensionsSupport.lookupSupport(ExtensionContext).

Since:
28.04.2020
  • Constructor Details

    • TestDropwizardAppExtension

      public TestDropwizardAppExtension()
      Create extension.
  • Method Details

    • forApp

      public static <C extends io.dropwizard.core.Configuration> TestDropwizardAppExtension.Builder<C> forApp(Class<? extends io.dropwizard.core.Application<C>> app)
      Builder for manual extension registration with RegisterExtension. Provides the same configuration options as TestDropwizardApp annotation (annotation considered as preferred usage way).

      IMPORTANT: extension must be used with static field only! You can't register multiple extensions!

      This is just a different way of extension configuration! Resulted extension object does not provide any additional methods (and not intended to be used at all)!

      Pure DropwizardTestSupport provides an ability to register custom Managed or listener DropwizardTestSupport.addListener(DropwizardTestSupport.ServiceListener). If you need these then use ExtensionBuilder.hooks(GuiceyConfigurationHook...) to register additional managed object or additional dropwizard or guicey bundle (which will be the same as listener above).

      Type Parameters:
      C - configuration type
      Parameters:
      app - application class
      Returns:
      builder for extension configuration.
    • getConfig

      protected ExtensionConfig getConfig(org.junit.jupiter.api.extension.ExtensionContext context)
      Description copied from class: GuiceyExtensionsSupport
      Returns existing config or parse it from annotation.

      Separate configuration creation is important for application re-use logic when additional actions from GuiceyExtensionsSupport.prepareTestSupport(String, org.junit.jupiter.api.extension.ExtensionContext, java.util.List) should be omitted in case if context already created.

      Specified by:
      getConfig in class GuiceyExtensionsSupport
      Parameters:
      context - extension context
      Returns:
      extension configuration
    • prepareTestSupport

      protected io.dropwizard.testing.DropwizardTestSupport<?> prepareTestSupport(String configPrefix, org.junit.jupiter.api.extension.ExtensionContext context, List<TestEnvironmentSetup> setups)
      Description copied from class: GuiceyExtensionsSupport
      The only role of actual extension class is to configure DropwizardTestSupport object according to annotation.
      Specified by:
      prepareTestSupport in class GuiceyExtensionsSupport
      Parameters:
      configPrefix - configuration properties prefix
      context - extension context
      setups - setup extensions resolved from fields (or empty list)
      Returns:
      configured dropwizard test support object