Skip to content

dropwizard/dropwizard-testing-junit4

Repository files navigation

Dropwizard Testing Support for JUnit 4.x

Build Quality Gate Status Maven Central

The dropwizard-testing-junit4 module provides you with support for testing Dropwizard 3.0.x or later applications with JUnit 4.x.

Deprecation note

It is recommended that new projects use the dropwizard-testing module with support for JUnit 5.x.

Please refer to the JUnit 5 User Guide: Migrating from JUnit 4 for details about how to migrate to JUnit 5.x.

Maven Artifacts

This project is available on Maven Central. To add it to your project you can add the following dependencies to your pom.xml:

<dependency>
  <groupId>io.dropwizard.modules</groupId>
  <artifactId>dropwizard-testing-junit4</artifactId>
  <version>${dropwizard.version}</version>
</dependency>

Usage

Adding DropwizardAppRule to your JUnit4 test class will start the app prior to any tests running and stop it again when they've completed (roughly equivalent to having used @BeforeClass and @AfterClass). DropwizardAppRule also exposes the app's Configuration, Environment and the app object itself so that these can be queried by the tests.

If you don't want to use the dropwizard-client module or find it excessive for testing, you can get access to a Jersey HTTP client by calling the client method on the rule. The returned client is managed by the rule and can be reused across tests.

public class LoginAcceptanceTest {
    @ClassRule
    public static final DropwizardAppRule<TestConfiguration> RULE =
        new DropwizardAppRule<>(MyApp.class, ResourceHelpers.resourceFilePath("my-app-config.yaml"));

    @Test
    public void loginHandlerRedirectsAfterPost() {
        Client client = RULE.client();
        Response response = client.target(
                String.format("http://localhost:%d/login", RULE.getLocalPort()))
                .request()
                .post(Entity.json(loginForm()));
        assertThat(response.getStatus()).isEqualTo(302);
    }
}

Warning:

Resource classes are used by multiple threads concurrently. In general, we recommend that resources be stateless/immutable, but it's important to keep the context in mind.

Support

Please file bug reports and feature requests in GitHub issues.

License

Copyright (c) 2022 Dropwizard Team

This library is licensed under the Apache License, Version 2.0.

See http://www.apache.org/licenses/LICENSE-2.0.html or the LICENSE file in this repository for the full license text.