Тестирование приложения Джерси, внедрение классов с использованием встроенной платформы Jersey Injection (HK2)

Мне нужно создать тесты для некоторого класса. Этот класс в основном проекте (src/main/java/..) легко внедряется в другие классы, поскольку у меня есть собственный класс ResourceConfig, который объявляет, какие пакеты необходимо сканировать для поиска классов обслуживания.

Теперь я создал тестовые каталоги (в src/test/java/..) и создал класс, что-то вроде:

public class TheMentionedClassIntegrationTest {
    @Inject
    private TheMentionedClass theMentionedClass ;

    @Test
    public void testProcessMethod() {
        assertNotNull(theMentionedClass);
    }
}

Но проблема в том, что что бы я ни делал, класс всегда равен нулю. В других тестах проекта я использовал класс JerseyTest. Поэтому я попытался сделать то же самое здесь, расширить TheMentionedClassIntegrationTest с помощью JerseyTest, переопределить метод configure, создать свой частный класс ResourceConfig, который регистрирует Binder (по умолчанию для всего проекта), а также зарегистрировать TheMentionedClassIntegrationTest.

Это не сработало. Я делал много разных попыток, но ни одна из них не увенчалась успехом. Я думаю, что работать с HK2 чрезвычайно сложно, нет хорошей документации или что-то в этом роде..

Ребята, у вас есть идея, как внедрить TheMentionedClass в тестовый класс? Может мой подход неверен?

Спасибо!


person azalut    schedule 07.12.2015    source источник
comment
Документация для hk2 находится по адресу hk2.java.net. Если есть потребность в дополнительной или лучшей документации, пожалуйста, сообщите нам, чего не хватает и что вы хотели бы видеть.   -  person jwells131313    schedule 08.12.2015


Ответы (1)


Проще всего просто создать ServiceLocator и использовать его для внедрения тестового класса, как см. здесь. Например

public class TheMentionedClassIntegrationTest {

    @Inject
    private TheMentionedClass theMentionedClass;

    @Before
    public void setUp() {
        ServiceLocator locator = ServiceLocatorUtilities.bind(new YourBinder());
        locator.inject(this);
    }

    @Test
    public void testProcessMethod() {
        assertNotNull(theMentionedClass);
    }
}

В качестве альтернативы вы можете использовать (создать) средство запуска JUnit, как показано здесь.

Для некоторых других идей вы можете проверить тесты для hk2-testing и все из его содержащих проектов для некоторых примеров использования.

person Paul Samsotha    schedule 08.12.2015
comment
ваш ответ должен быть добавлен в официальную документацию.. спасибо!! - person azalut; 08.12.2015