从 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 尝试过。
现在自定义模块的 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 尝试过。