package io.dropwizard.testing.app; import io.dropwizard.testing.junit.ResourceTestRule; import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory; import org.junit.ClassRule; import org.junit.Test; import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; import static org.assertj.core.api.Assertions.assertThat; /** * Tests {@link io.dropwizard.testing.junit.ResourceTestRule} with a different * test container factory. */ public class ResourceTestWithGrizzly { @ClassRule public static final ResourceTestRule RESOURCES = ResourceTestRule.builder() .addResource(new ContextInjectionResource()) .setTestContainerFactory(new GrizzlyWebTestContainerFactory()) .addProvider(new RuntimeExceptionMapper()) .build(); @Test public void testResource() { assertThat(RESOURCES.target("test").request() .get(String.class)) .isEqualTo("test"); } @Test public void testExceptionMapper() { final Response resp = RESOURCES.target("test").request() .post(Entity.json("")); assertThat(resp.getStatus()).isEqualTo(500); assertThat(resp.readEntity(String.class)).isEqualTo("Can't touch this"); } private static class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> { @Override public Response toResponse(RuntimeException exception) { return Response.serverError() .type(MediaType.TEXT_PLAIN_TYPE) .entity(exception.getMessage()) .build(); } } }