使用JBoss 7.1构建的真实EAR进行Arquillian测试

时间:2012-06-25 15:09:48

标签: jboss jboss7.x jboss-arquillian

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

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

@Deployment
public static EnterpriseArchive createDeployment() {
    File earFile = ...
    EnterpriseArchive archive = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, earFile);
    return archive;
}

我可以通过Arquillian将EAR放到JBoss。我看到部署,部署期间没有错误。只有Arquillian返回一个错误,它无法找到测试类,这显然是可以的。

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

我必须把测试类放到???

我的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>

3 个答案:

答案 0 :(得分:1)

您可以使用@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) {
        ....
    }

}

答案 1 :(得分:0)

将测试类放入耳中的战争对我有用

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

答案 2 :(得分:0)

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