Access Spring bean из контекста тестирования интеграции Alfresco - PullRequest
1 голос
/ 28 мая 2019

Теперь, когда интеграционные тесты Alfresco для пользовательских модулей выполняются с использованием Docker, мне интересно, как сделать дополнительные компоненты Spring доступными в этом контексте и как получить доступ к существующим компонентам Spring в тестовых классах.

До Alfresco 5.xЯ использовал для аннотирования тестового класса

@ContextConfiguration("classpath:alfresco/application-context.xml")

Это сделало контекст Spring доступным.Чтобы сделать бины Spring из этого контекста доступными в тестовом классе, я аннотировал следующие члены:

@Autowired
@Qualifier("authenticationComponent")
private AuthenticationComponent authenticationComponent;

Кроме того, я смог определить дополнительные бины Spring в src/test/resources/alfresco/extension/test-context.xml.

Isэтот подход использовать при написании интеграционных тестов для 6.x и Docker?

По крайней мере, аннотация org.springframework.test.context.ContextConfiguration больше не включена в сборку модуля с использованием архетипа Maven 4.0.0 SDK.

В этом блоге говорится о вышеупомянутых аннотациях.Но зависимости, извлекаемые pom.xml, созданными из архетипа SDK 4, не включают эти аннотации.

Другой подход, по-видимому, заключается в использовании только

@RunWith(value = AlfrescoTestRunner.class)

при интеграциитестовый класс.Но как я могу получить в него бобы Spring, такие как nodeService?И как мне объявить и сделать доступными дополнительные компоненты Spring, которые являются частью моего пользовательского модуля и требуются для успешного прохождения теста интеграции?

1 Ответ

3 голосов
/ 28 мая 2019

Вы можете получить контекст Spring через AlfrescoTestRunner следующим образом:

@Before
public void setUp() {
    this.nodeService = (NodeService) super.getApplicationContext().getBean("nodeService");
}

Я делаю то же самое с пользовательскими компонентами: super.getApplicationContext().getBean(MyType.class);

Так как интеграционные тесты запускаются в хранилище, весь контекст Spring доступен автоматически.

Обратите внимание, что вашему тестовому классу необходимо расширить AbstractAlfrescoIT, чтобы это работало.

Пример класса может выглядеть следующим образом:

package nl.open.mystuff;

import org.alfresco.rad.test.AbstractAlfrescoIT;
import org.alfresco.rad.test.AlfrescoTestRunner;
import org.alfresco.service.cmr.repository.NodeService;

@RunWith(value = AlfrescoTestRunner.class)
public class MyCustomIT extends AbstractAlfrescoIT {

    private NodeService nodeService;
    private MyType myType;

    @Before
    public void setUp() {
        this.nodeService = (NodeService) super.getApplicationContext().getBean("NodeService");
        this.myType = super.getApplicationContext().getBean(MyType.class);
    }
}

В Alfresco SDK 3 вы даже можете добавить свои собственные XML-файлы Spring в src/test/resources/alfresco/extension/*-context.xml.Я думаю, что это все еще работает, но я сам не пробовал это с SDK 4.

...