Модульное тестирование ресурсов Джерси с полями Guice - PullRequest
5 голосов
/ 09 октября 2011

У меня есть ресурс Джерси, который я хочу проверить с помощью JUnit.Ресурс использует Guice Providers для вставки определенных полей:

@Path("/example/")
class ExampleResource {
    @Inject
    Provider<ExampleActionHandler> getMyExampleActionHandlerProvider;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<ExamplePojo> getExampleList() {
        ExampleActionHandler handler = getMyExampleActionHandlerProvider.get();
        handler.doSomething();
    ...

Все это прекрасно работает при использовании реального сервера для обслуживания API, однако тестирование проблематично.

Мой тестовый класс в настоящее время выглядитчто-то вроде:

public class ApiTest extends JerseyTest {

  public ApiTest() throws Exception {
    super();
    ApplicationDescriptor appDescriptor = new ApplicationDescriptor();
    appDescriptor.setContextPath("/api");
    appDescriptor.setRootResourcePackageName("com.my.package.name");
    super.setupTestEnvironment(appDescriptor);
  }

  @Test
  public void testHelloWorld() throws Exception {
    String responseMsg = webResource.path("example/").get(String.class);
    Assert.assertEquals("{}", responseMsg);
  }
}

Очевидно, что Guice не получает возможность инициализировать поля в ExampleResource, так что вызов handler.doSomething() не приводит к исключению NullPointerException.

Есть ли способ сообщить Джерси создать экземпляр класса ExampleResource с помощью Guice, чтобы поставщик работал?

1 Ответ

0 голосов
/ 14 октября 2011

Один из способов сделать это - разбить тесты на несколько шагов. Вам нужно создать инжектор, с которым вы конфигурируете сервис, и протестировать этот инжектор (см. Тестирование привязок сервлета Guice и Тестирование Guice может инициировать сервлеты ). Используя эти тесты, вы убедитесь, что у вас есть правильные привязки на месте. Получив инжектор, получите из него объект ApplicationDescriptor с помощью

ExampleResource exampleResource = injector.getInstance(ExampleResource.class);
Assert.assertEquals(myList, getExampleList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...