Кто-нибудь знает, как добавить тестовый ресурс (т. Е. Тот, который предназначен только для тестирования и не добавлен в метод run() приложения)?Интегрированное тестирование Dropwizard с TestResource
Вот пример:
public class MyTest {
@ClassRule
public static final DropwizardAppRule<TestConfiguration> RULE =
new DropwizardAppRule<TestConfiguration>(MyApp.class, "my-app-config.yaml");
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
MyTest.RULE.getEnvironment().jersey().register(new JustForTestingResource());
}
@Test
public final void testTestResource()
{
Client client = new Client();
ClientResponse response = client.resource(
String.format("http://localhost:%d/rest/v1/test", RULE.getLocalPort()))
.get(ClientResponse.class);
assertThat(response.getStatus(), is(200));
}
}
и
public class JustForTestingRessource {
@GET
@Path("test")
@Produces(MediaType.APPLICATION_JSON)
public Response getInTestResource()
{
return Response.status(Status.OK).type(MediaType.TEXT_PLAIN).entity("get @Path(\"test\") is ok").build();
}
}
Моя проблема заключается в том, что добавленный ресурс не будет добавлен и я получаю ресурс не найден ответ 404 ошибки. Кажется, что я регистрирую новый ресурс после публикации ресурсов, и после запуска обновления в Dropwizard нет.
Я не хочу расширять класс приложения, и я не хочу вставлять тестовый код в мой настоящий код приложения. Кто-нибудь знает, как зарегистрировать тестовый ресурс, не зарегистрировав его в методе run() приложения?
Это работает, но нужен новый класс:
public class TestService extends MyService{
@Override
public void run(
TestConfigurationconfiguration,
Environment environment) throws ClassNotFoundException
{
environment.jersey().register(new JustForTestingRessource());
super.run(configuration,environment);
}
}
вызов в JUnit, как уже известно:
@ClassRule
public static DropwizardAppRule<TestConfiguration> RULE =
new DropwizardAppRule<TestConfiguration>(TestService.class, "my-app-config.yaml");
Что-то вроде RULE.addRessource (...) будет nice ... – user3280180