从 Alfresco 集成测试上下文访问 Spring 个 bean

Access Spring beans from Alfresco integration test context

现在自定义模块的 Alfresco 集成测试 运行 使用 Docker,我想知道如何在此上下文中提供额外的 Spring beans 以及如何访问现有的 Spring bean 在测试中 classes.

直到Alfresco 5.x,我曾经用

注释测试class
@ContextConfiguration("classpath:alfresco/application-context.xml")

这使得 Spring 上下文可用。为了使此上下文中的 Spring bean 在测试 class 中可用,我这样注释成员:

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

此外,我能够在 src/test/resources/alfresco/extension/test-context.xml 中定义额外的 Spring 个 bean。

这是为 6.x 和 Docker 编写集成测试时使用的方法吗?

至少注释 org.springframework.test.context.ContextConfiguration 不再包含在使用 Maven 4.0.0 SDK 原型的模块构建中。

This blog post讲的就是上面提到的注解。但是从 SDK 4 原型创建的 pom.xml 引入的依赖项不包括这些注释。

另一种方法似乎是只使用

@RunWith(value = AlfrescoTestRunner.class)

关于集成测试 class。但是如何将 Spring 像 nodeService 这样的 bean 注入其中呢?我如何声明和提供额外的 Spring bean,它们是我的自定义模块的一部分并且是集成测试成功所必需的?

您可以通过 AlfrescoTestRunner 获取 Spring 上下文,如下所示:

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

我对自定义 bean 做同样的事情: super.getApplicationContext().getBean(MyType.class);

由于存储库中的集成测试 运行,所有 Spring 上下文自动可用。

请注意,您的测试 class 需要扩展 AbstractAlfrescoIT 才能正常工作。

示例 class 可能如下所示:

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 中,您甚至可以在 src/test/resources/alfresco/extension/*-context.xml 下添加自己的 Spring XML 文件。我想这仍然有效,但我自己还没有用 SDK 4 尝试过。