Я пытаюсь написать функциональные тесты для моего REST API с использованием рамки теста Jersey. Тем не менее, я, похоже, попал в блокпост, когда речь заходит об использовании инъекции зависимостей в рамках моих функциональных тестов. Мое главное приложение выглядит следующим образом:Функциональные тесты с тестированием на Джерси, инъекция зависимостей гризли и HK2
@ApplicationPath("/")
public class Application extends ResourceConfig {
private static final URI BASE_URI = URI.create("http://localhost:8080/api/");
public static void main(String[] args) throws Exception {
System.out.println("Starting application...");
final ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator();
final ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(JacksonFeature.class);
resourceConfig.register(LoggingFeature.class);
resourceConfig.packages(true, "my.package.name");
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig, locator);
Runtime.getRuntime().addShutdownHook(new Thread(server::shutdownNow));
server.start();
Thread.currentThread().join();
}
}
Заметьте здесь, что я использую метод ServiceLocatorUtilities.createAndPopulateServiceLocator()
в ¯hk2 для того, чтобы прочитать файл hk2-metadata-generator
. Этот метод создает объект ServiceLocator
, который затем, в свою очередь, передается методу GrizzlyHttpServerFactory.createHttpServer
. Все это отлично работает для запуска сервера Grizzly, однако теперь у меня есть вопрос, как создать функциональные тесты для моего приложения с помощью тестовой платформы Jersey?
Моего модульное тестирование в настоящее время выглядит следующим образом:
public class FormsResourceTest extends JerseyTest {
@Override
protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
return new GrizzlyWebTestContainerFactory();
}
@Test
public void testMe() {
Response response = target("/test").request().get();
assertEquals("Should return status 200", 200, response.getStatus());
}
}
Есть даже способ использовать локатор HK2 службы с каркасом Джерси Test или мне нужно лечить мое приложение как внешний контейнер и использовать поставщик внешних контейнеров, как описано здесь: External container?
Кроме того, поскольку это функциональные тесты, насмешливые инъецируемые услуги здесь не являются вариантом.
Почему вы не можете использовать AbstractBinder для привязки зависимостей (интерфейс к импликации), а затем зарегистрировать связующее средство в ResourceConfig и передать ResourceConfig на сервер? – Raf
@Raf Это на самом деле направление, в которое я попал. Я понял, что лучше явно указывать свои зависимости вместо сканирования пакетов, чтобы найти их. –