我正在使用 Arquillian 和使用 TestNG 的嵌入式 glassfish 3.1.2.2 编写集成测试。我希望能够并行运行这些测试,对于这种情况,我需要动态配置 glassfish 端口和数据库名称(我们已经有了这个设置,我想在 arquillian 测试中重用它)。我缺少的是一个“容器启动前”挂钩,我可以在其中准备数据库、查找空闲端口并更新我的 glassfish 配置(domain.xml,也可以是 glassfish-resources.xml)。是否有一个“干净”的解决方案,或者 Arquillian 开发人员没有预见到我的用例?
我目前解决它的黑客方法是覆盖 arquillian 的 beforeSuite 方法,但是这个方法被调用了两次——在测试启动时,然后在容器中(因此我可怜的静态标志)。其次,该解决方案不适用于基于 JUnit 的测试,因为无法拦截 arquillian 的 before 套件:
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
;
+ 我在Arquillian JavaDocsorg.jboss.arquillian.container.spi.event.container.BeforeStart
中看到过事件 ,但我不知道如何收听 Arquillian 事件;
+ 我看到有可能创建一个ShrinkWrap Descriptor,但这些不支持 Glassfish 资源。@Deployment