У меня есть ресурс Джерси, который я хочу проверить с помощью 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, чтобы поставщик работал?