基于JBoss7.1构建的真实EAR的Arquillian测试

基于JBoss7.1构建的真实EAR的Arquillian测试,jboss,jboss7.x,jboss-arquillian,Jboss,Jboss7.x,Jboss Arquillian,我想用Arquillian测试JavaEE应用程序。一个简单的设置是将一些测试类放到Arquillian管理的服务器上进行测试 现在,我想使用在构建过程中构建的EAR文件。与 @Deployment public static EnterpriseArchive createDeployment() { File earFile = ... EnterpriseArchive archive = ShrinkWrap.createFromZipFile(EnterpriseArc

我想用Arquillian测试JavaEE应用程序。一个简单的设置是将一些测试类放到Arquillian管理的服务器上进行测试

现在,我想使用在构建过程中构建的EAR文件。与

@Deployment
public static EnterpriseArchive createDeployment() {
    File earFile = ...
    EnterpriseArchive archive = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, earFile);
    return archive;
}
我可以通过Arquillian将耳朵放到JBoss。我看到了部署,部署期间没有错误。只有Arquillian返回一个错误,它无法找到测试类,这显然是正常的

现在的问题是把测试类放在哪里。我可以将test类放入由Arquillian放入EAR的test.war中,但我得到了一个ArquillianServletRunner未发现异常。当我将测试类作为模块或库放入JAR文件中时,在作为模块放入时找不到测试类,或者由于依赖性问题,在作为库放入时注入不起作用

我必须把测试类放在哪里

My arquillian.xml:

<?xml version="1.0" encoding="UTF-8"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://jboss.org/schema/arquillian"
    xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

   <defaultProtocol type="Servlet 3.0" />

    <container qualifier="jboss7" default="true">
        <configuration>
            <property name="jbossHome">${cargo.dir}/jboss-as-dist-7.1.1.Final/jboss-as-7.1.1.Final</property>
        </configuration>
    </container>

    <engine>
        <property name="deploymentExportPath">target/deployments</property>
    </engine>

</arquillian>

${cargo.dir}/jboss-as-dist-7.1.1.Final/jboss-as-7.1.1.Final
目标/部署

您可以使用@Deployment(testable=false)在客户端运行测试类,但这有一个缺点,即目前无法使用持久性扩展(可能还有其他扩展)

我的示例代码:

@RunWith(Arquillian.class)
public class PersonWebServiceIT {

    private PersonWebService service;

    @Deployment(testable = false)
    public static Archive<?> createDeployment() {
        return ShrinkWrap
                .create(ZipImporter.class, "test.war")
                .importFrom(
                        new File("simple-webservice-1.0.0-SNAPSHOT.war"))
                .as(WebArchive.class);
    }

    @Test
    public void testFindPersons(@ArquillianResource URL deploymentUrl) {
        ....
    }

}
@RunWith(Arquillian.class)
公共类PersonWebService{
私人PersonWebService服务;
@部署(可测试=错误)
公共静态存档createDeployment(){
回缩包装
.create(ZipImporter.class,“test.war”)
.进口自(
新文件(“simple-webservice-1.0.0-SNAPSHOT.war”))
.as(WebArchive.class);
}
@试验
public void testFindPersons(@ArquillianResource URL deploymentUrl){
....
}
}

将测试类放到ear中的war中确实对我有用

WebArchive war = ear.getAsType(WebArchive.class, "/mywarname.war");
war.addClass(MyTestClass.class);

当我处理现有的EAR时,我更喜欢将运行测试的WAR与我放入特殊JAR以及其他测试EJB中的实际测试分开。我已经发布了一个示例,在类似的问题下,如何使用必要的
application.xml
操作: