Class TestGuiceyAppExtension
- java.lang.Object
-
- ru.vyarus.dropwizard.guice.test.jupiter.ext.TestParametersSupport
-
- ru.vyarus.dropwizard.guice.test.jupiter.ext.GuiceyExtensionsSupport
-
- ru.vyarus.dropwizard.guice.test.jupiter.ext.TestGuiceyAppExtension
-
- 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
public class TestGuiceyAppExtension extends GuiceyExtensionsSupport
TestGuiceyApp
junit 5 extension implementation. Normally, extension should be activated with annotation, but in some cases manual registration may be used:
Registration in static field is complete equivalent of annotation declaration! When registered in non-static field, application would be started for each test method.@RegisterExtension static TestGuiceyAppExtension app = TestGuiceyAppExtension.forApp(MyApp.class).create()
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
orTestSupport
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:
- 29.04.2020
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
TestGuiceyAppExtension.Builder
Builder used for manual extension registration (forApp(Class)
).
-
Field Summary
-
Fields inherited from class ru.vyarus.dropwizard.guice.test.jupiter.ext.GuiceyExtensionsSupport
tracker
-
-
Constructor Summary
Constructors Constructor Description TestGuiceyAppExtension()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static TestGuiceyAppExtension.Builder
forApp(java.lang.Class<? extends io.dropwizard.core.Application> app)
Builder for manual extension registration withRegisterExtension
.protected ExtensionConfig
getConfig(org.junit.jupiter.api.extension.ExtensionContext context)
Returns existing config or parse it from annotation.protected io.dropwizard.testing.DropwizardTestSupport<?>
prepareTestSupport(java.lang.String configPrefix, org.junit.jupiter.api.extension.ExtensionContext context, java.util.List<TestEnvironmentSetup> setups)
The only role of actual extension class is to configureDropwizardTestSupport
object according to annotation.-
Methods inherited from class ru.vyarus.dropwizard.guice.test.jupiter.ext.GuiceyExtensionsSupport
afterAll, afterEach, beforeAll, beforeEach, closeReusableApp, getClient, getExtensionStore, getInjector, getSupport, isReusableAppUsed, lookupClient, lookupInjector, lookupSupport
-
Methods inherited from class ru.vyarus.dropwizard.guice.test.jupiter.ext.TestParametersSupport
resolveParameter, supportsParameter
-
-
-
-
Method Detail
-
forApp
public static TestGuiceyAppExtension.Builder forApp(java.lang.Class<? extends io.dropwizard.core.Application> app)
Builder for manual extension registration withRegisterExtension
. Provides the same configuration options asTestGuiceyApp
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 customManaged
or listenerDropwizardTestSupport.addListener(DropwizardTestSupport.ServiceListener)
. If you need these then useExtensionBuilder.hooks(GuiceyConfigurationHook...)
to register additional managed object or additional dropwizard bundle (which will be the same as listener above).- 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 classGuiceyExtensionsSupport
- Parameters:
context
- extension context- Returns:
- extension configuration
-
prepareTestSupport
protected io.dropwizard.testing.DropwizardTestSupport<?> prepareTestSupport(java.lang.String configPrefix, org.junit.jupiter.api.extension.ExtensionContext context, java.util.List<TestEnvironmentSetup> setups)
Description copied from class:GuiceyExtensionsSupport
The only role of actual extension class is to configureDropwizardTestSupport
object according to annotation.- Specified by:
prepareTestSupport
in classGuiceyExtensionsSupport
- Parameters:
configPrefix
- configuration properties prefixcontext
- extension contextsetups
- setup extensions resolved from fields (or empty list)- Returns:
- configured dropwizard test support object
-
-