gpt4 book ai didi

glassfish - Arquillian - 编程配置

转载 作者:行者123 更新时间:2023-12-02 23:51:06 25 4
gpt4 key购买 nike

我正在使用带有嵌入式 glassfish 3.1.2.2 的 Arquillian 和 TestNG 编写集成测试。我希望能够并行运行这些测试,对于这种情况,我需要动态配置 glassfish 端口和数据库名称(我们已经有了这个设置,我想在 arquillian 测试中重用它)。我缺少的是一个“容器启动之前”钩子(Hook),我可以在其中准备数据库、查找可用端口并更新我的 glassfish 配置(domain.xml,也可以是 glassfish-resources.xml)。是否有一个“干净”的解决方案,或者 Arquillian 开发人员没有预见到我的用例?

我目前解决这个问题的黑客方法是覆盖 arquillian 的 beforeSuite 方法,但是这个方法被调用两次 - 在测试启动时,然后在容器中(因此是我可悲的静态标志)。其次,此解决方案不适用于基于 JUnit 的测试,因为无法拦截 arquillian 的 before suite:

public class FullContainerIT extends Arquillian {

private static boolean dbInitialized;

//@RunAsClient <-supported by @Test only
@Override
@BeforeSuite(groups = "arquillian", inheritGroups = true)
public void arquillianBeforeSuite() throws Exception {
if (dbInitialized == false) {
initializeDb();
dbInitialized = true;
}
super.arquillianBeforeSuite();
}
}

我的一些想法:
+ 具有 @BeforeSuite @RunAsClient似乎是我需要的,但是@RunAsClient支持 @Test仅;
+ 我见过org.jboss.arquillian.container.spi.event.container.BeforeStart事件Arquillian JavaDocs ,但我不知道如何监听 Arquillian 事件;
+ 我已经看到有可能有 @Deployment创建 ShrinkWrap Descriptor ,但这些不支持 Glassfish 资源。

最佳答案

我在 JBoss forum 上找到了解决我的问题的干净解决方案。您可以注册 LoadableExtension SPI 并修改 arquillian 配置(从 xml 加载)。我可以在这里创建数据库并使用正确的值过滤 glassfish-resources.xml。设置如下所示:

package com.example.extenstion;

public class AutoDiscoverInstanceExtension
implements org.jboss.arquillian.core.spi.LoadableExtension {

@Override
public void register(ExtensionBuilder builder) {
builder.observer(LoadContainerConfiguration.class);
}
}

package com.example.extenstion;

public class LoadContainerConfiguration {

public void registerInstance(@Observes ContainerRegistry, ServiceLoader serviceLoader) {

//Do the necessary setup here
String filteredFilename = doTheFiltering();

//Get the container defined in arquillian.xml and modify it
//"default" is the container's qualifier
Container definition = registry.getContainer("default");
definition.getContainerConfiguration()
.property("resourcesXml", filteredFilename);
}
}

您还需要通过创建文件来配置 SPI 扩展
META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
包含以下内容:

com.example.extenstion.AutoDiscoverInstanceExtension

关于glassfish - Arquillian - 编程配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com