Как я могу внедрить зависимость источника данных в веб-сервис RESTful с помощью Jersey (Test Framework)? - PullRequest
7 голосов
/ 05 мая 2011

Я создаю веб-сервис RESTful, используя Джерси, который использует MongoDB для сохранения.

Веб-сервис сам подключается к базе данных по умолчанию, но для модульных тестов я хотел бы использовать отдельную тестовую базу данных. Я заполнил бы эту тестовую базу данных в setUp, запустил мои тесты, а затем уничтожил бы ее в tearDown.

Обычно я бы использовал внедрение зависимостей здесь для предоставления источника данных менеджеру сущностей, который будет использовать служба, но в этом случае веб-служба работает независимо от модульных тестов. Я использую платформу Jersey Test Framework, которая запускает контейнер Grizzly для предоставления интерфейса веб-службы и предоставляет клиент веб-службы для класса модульного тестирования.

Каков наилучший способ внедрить зависимость из моего класса модульного теста в экземпляр сервера (который среда Jersey Test Framework устанавливает в контейнере Grizzly)?

1 Ответ

3 голосов
/ 11 мая 2011

После изучения источника Jersey Test Framework я обнаружил элегантный способ внедрения зависимостей в мои классы ресурсов RESTful.

В моем тестовом классе (который расширяет JerseyTest) я добавил только реализацию метода configure ():

public AppDescriptor configure() {
    return new WebAppDescriptor.Builder()
        .contextListenerClass(ContextLoaderListener.class)
        .contextParam("contextConfigLocation", "classpath:applicationContext.xml")
        .initParam("com.sun.jersey.config.property.packages", "[resource package]")
        .build();
}

Это фактически обеспечивает пользовательский WebAppDescriptor вместо того, чтобы полагаться на веб-контейнер Grizzly Jersey Test для его создания.

При этом будет использоваться файл applicationContext.xml в пути к классам, который можно настроить по-разному для запуска тестов JUnit. По сути, у меня есть два разных файла applicationContext.xml: один для моих тестов JUnit, а другой для рабочего кода. Приложение applicationContext.xml теста настроит объект зависимости доступа к данным по-разному.

...