Могу ли я использовать OSGi Mocks с аннотациями декларативных сервисов - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь протестировать службу OSGi, аннотированную аннотациями служб декларации (org.osgi.service.component.annotations).Я сгенерировал свой проект на основе AEM Multi-Project Example .

public class PostServiceTest {

  @Rule
  public AemContext context = new AemContext((AemContextCallback) context -> {
    context.registerInjectActivateService(new PostService());
  }, ResourceResolverType.RESOURCERESOLVER_MOCK);

  @Test
  public void shouldFetchRandomPosts() {
    final PostService postsService = context.getService(PostService.class);
    final List<Post> posts = postsService.randomPosts(100);

    assertEquals(100, posts.size());
  }

}

Всякий раз, когда я запускаю этот тест в IntelliJ, OSGi Mocks жалуется на отсутствие метаданных SCR в тестируемом классе.

org.apache.sling.testing.mock.osgi.NoScrMetadataException: No OSGi SCR metadata found for class com.example.PostServiceTest
  at org.apache.sling.testing.mock.osgi.OsgiServiceUtil.injectServices(OsgiServiceUtil.java:381)
  at org.apache.sling.testing.mock.osgi.MockOsgi.injectServices(MockOsgi.java:148)
  at org.apache.sling.testing.mock.osgi.context.OsgiContextImpl.registerInjectActivateService(OsgiContextImpl.java:153)
  at org.apache.sling.testing.mock.osgi.context.OsgiContextImpl.registerInjectActivateService(OsgiContextImpl.java:168)
  at com.example.PostServiceTest.shouldReturnTheEnpointNamesWithValidConfigurationAsTheListOfAcceptableKeys(PostServiceTest.java:23)

Означает ли это, что я могу тестировать только классы, аннотированные более старыми аннотациями SCR, которые поставляются с Apache Felix?Документация для OSGi Mocks предполагает, что аннотации декларативных сервисов поддерживаются в версии 2.0.0 и выше .Используемая версия соответствует этому критерию.

1 Ответ

0 голосов
/ 25 мая 2018

Интересно, что это произошло только тогда, когда я запустил тест непосредственно из IDE.Оказывается, IntelliJ не генерировал метаданные SCR при компиляции моих классов для тестов.

Когда я компилирую тестируемый класс с помощью Gradle, плагин 'com.cognifide.aem.bundle' используется для генерации дескриптора SCR и помещения его врезультирующий архив Java.Вот почему модульные тесты, выполненные Gradle, работают нормально.Просто нажав кнопку Выполнить в IntelliJ, можно было пропустить этот шаг.

Чтобы все заработало, я настроил IntelliJ, чтобы позволить мне запускать модульные тесты через Gradle.

Я перешел к Настройки> Построение, Выполнение, Развертывание> Gradle> Runner и использовал раскрывающееся меню, чтобы я мог решить, использовать ли Gradle для каждого теста отдельно.

Settings dialog in IntelliJ with a checkbox that says 'Delegate IDE build/run actions to gradle' and a dropdown menu with the option 'Let me choos per test' selected

...