【问题标题】:Arquillian test with real EAR from build on JBoss 7.1使用 JBoss 7.1 构建的真实 EAR 进行 Arquillian 测试
【发布时间】:2012-06-25 15:09:48
【问题描述】:

我想用 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 not found 异常。当我将测试类作为模块或库放入 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>

【问题讨论】:

    标签: jboss jboss7.x jboss-arquillian


    【解决方案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) {
            ....
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      将测试课程投入到耳朵内部的战争中确实对我有用

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-22
          • 2014-03-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多